{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Modeling Scale-Free Networks\n",
    "\n",
    "Including a new model that generates graphs with small world properties and a lognormal degree distribution.\n",
    "\n",
    "\n",
    "Copyright 2016 Allen Downey, [MIT License](http://opensource.org/licenses/MIT)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "from __future__ import print_function, division\n",
    "\n",
    "%matplotlib inline\n",
    "%precision 3\n",
    "\n",
    "import warnings\n",
    "warnings.filterwarnings('ignore')\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "import random\n",
    "import networkx as nx\n",
    "import numpy as np\n",
    "\n",
    "from thinkstats2 import Pmf, Cdf\n",
    "import thinkplot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from thinkstats2 import RandomSeed\n",
    "RandomSeed(17)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Introduction\n",
    "\n",
    "Real social networks generally have the properties of small world graphs (high clustering and low path lengths) and the characteristics of scale free networks (a heavy-tailed degree distribution).\n",
    "\n",
    "The Watts-Strogatz (WS) network model has small world characteristics, but the degree distribution is roughly normal, very different from observed distributions.\n",
    "\n",
    "The Barabasi-Albert (BA) model has low path lengths and a heavy-tailed degree distribution, but\n",
    "\n",
    "1. It has low clustering, and \n",
    "2. The degree distribution does not fit observed data well.\n",
    "\n",
    "The Holmes-Kim (HK) model generates graphs with higher clustering, although still not as high as observed values.  And the degree distribution is heavy tailed, but it still doesn't fit observed distributions well.\n",
    "\n",
    "I propose a new model that generates graphs with\n",
    "\n",
    "1.  Low path lenths,\n",
    "2.  Clustering coefficients similar to the HK model (but still lower than observed values), and\n",
    "3.  A degree distribution that fits observed data well.\n",
    "\n",
    "I test the models with a relatively small dataset from [SNAP](https://snap.stanford.edu/data/egonets-Facebook.html).\n",
    "\n",
    "The proposed model is based on a \"friend of a friend\" growth mechanism that is a plausible description of the way social networks actually grow.  The implementation is simple, comparable to BA and HK in both lines of code and run time."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Facebook data"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The following function reads a file with one edge per line, specified by two integer node IDs."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "def read_graph(filename):\n",
    "    G = nx.Graph()\n",
    "    array = np.loadtxt(filename, dtype=int)\n",
    "    G.add_edges_from(array)\n",
    "    return G"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We'll read the Facecook data downloaded from [SNAP](https://snap.stanford.edu/data/egonets-Facebook.html)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(4039, 88234)"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# https://snap.stanford.edu/data/facebook_combined.txt.gz\n",
    "\n",
    "fb = read_graph('facebook_combined.txt.gz')\n",
    "n = len(fb)\n",
    "m = len(fb.edges())\n",
    "n, m"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false
   },
   "source": [
    "The average clustering coefficient is about 0.6"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "from networkx.algorithms.approximation import average_clustering"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.602"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "C = average_clustering(fb)\n",
    "C"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The average path length is short."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def random_path_lengths(G, nodes=None, trials=1000):\n",
    "    \"\"\"Choose random pairs of nodes and compute the path length between them.\n",
    "\n",
    "    G: Graph\n",
    "    nodes: list of nodes to choose from\n",
    "    trials: number of pairs to choose\n",
    "\n",
    "    returns: list of path lengths\n",
    "    \"\"\"\n",
    "    if nodes is None:\n",
    "        nodes = G.nodes()\n",
    "    else:\n",
    "        nodes = list(nodes)\n",
    "        \n",
    "    pairs = np.random.choice(nodes, (trials, 2))\n",
    "    lengths = [nx.shortest_path_length(G, *pair) \n",
    "               for pair in pairs]\n",
    "    return lengths\n",
    "\n",
    "def estimate_path_length(G, nodes=None, trials=1000):\n",
    "    return np.mean(random_path_lengths(G, nodes, trials))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3.686"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "L = estimate_path_length(fb)\n",
    "L"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## WS model\n",
    "\n",
    "Next I'll construct a WS graph with the same number of nodes and average degree as the Facebook network:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(4039, 88234, 44)"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "n = len(fb)\n",
    "m = len(fb.edges())\n",
    "k = int(round(2*m/n))\n",
    "n, m, k"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "With `p=0.05`, we get clustering and path lengths similar to the Facebook data:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(4039, 88858)"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ws = nx.watts_strogatz_graph(n, k, p=0.05)\n",
    "len(ws), len(ws.edges())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The clustering coefficient in the model is a little higher than in the data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(0.602, 0.627)"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "C, average_clustering(ws)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "And the mean path length is a little smaller."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(3.686, 3.246)"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "L, estimate_path_length(ws)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "So the WS model has the small world properties.  But the distribution of degrees is very different from the data.\n",
    "\n",
    "This function extracts the list of degrees, one for each node."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def degrees(G):\n",
    "    \"\"\"List of degrees for nodes in `G`.\n",
    "    \n",
    "    G: Graph object\n",
    "    \n",
    "    returns: list of int\n",
    "    \"\"\"\n",
    "    return [G.degree(u) for u in G]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The mean degree is about right:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(43.691, 44.000)"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.mean(degrees(fb)), np.mean(degrees(ws))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "But the standard deviation isn't even close."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(52.414, 1.509)"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.std(degrees(fb)), np.std(degrees(ws))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can see what's going on by plotting the distributions:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "pmf_fb = Pmf(degrees(fb))\n",
    "pmf_ws = Pmf(degrees(ws))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The degree distribution in the WS graph is roughly Gaussian.  The degree distribution in social networks is emphatically not Gaussian."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f27210b91d0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "thinkplot.preplot(cols=2)\n",
    "\n",
    "thinkplot.Pdf(pmf_fb, label='Facebook')\n",
    "thinkplot.config(xlabel='degree', ylabel='PMF')\n",
    "\n",
    "thinkplot.subplot(2)\n",
    "\n",
    "thinkplot.Pdf(pmf_ws, label='WS graph')\n",
    "thinkplot.config(xlabel='degree', ylabel='PMF')\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "And that discrepancy is at least part of the motivation for the BA model."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## BA model"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Here's a simplified version of the NetworkX function that generates BA graphs."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# modified version of the NetworkX implementation from\n",
    "# https://github.com/networkx/networkx/blob/master/networkx/generators/random_graphs.py\n",
    "\n",
    "def barabasi_albert_graph(n, m, seed=None):\n",
    "    \"\"\"Returns a random graph according to the Barabási–Albert preferential\n",
    "    attachment model.\n",
    "    A graph of `n` nodes is grown by attaching new nodes each with `m`\n",
    "    edges that are preferentially attached to existing nodes with high degree.\n",
    "    Parameters\n",
    "    ----------\n",
    "    n : int\n",
    "        Number of nodes\n",
    "    m : int\n",
    "        Number of edges to attach from a new node to existing nodes\n",
    "    seed : int, optional\n",
    "        Seed for random number generator (default=None).\n",
    "    Returns\n",
    "    -------\n",
    "    G : Graph\n",
    "    Raises\n",
    "    ------\n",
    "    NetworkXError\n",
    "        If `m` does not satisfy ``1 <= m < n``.\n",
    "    References\n",
    "    ----------\n",
    "    .. [1] A. L. Barabási and R. Albert \"Emergence of scaling in\n",
    "       random networks\", Science 286, pp 509-512, 1999.\n",
    "    \"\"\"\n",
    "\n",
    "    if m < 1 or  m >=n:\n",
    "        raise nx.NetworkXError(\"Barabási–Albert network must have m >= 1\"\n",
    "                               \" and m < n, m = %d, n = %d\" % (m, n))\n",
    "        \n",
    "    if seed is not None:\n",
    "        random.seed(seed)\n",
    "    \n",
    "    G = nx.empty_graph(m)\n",
    "    targets = list(range(m))\n",
    "    repeated_nodes = []\n",
    "\n",
    "    for source in range(m, n):\n",
    "\n",
    "        G.add_edges_from(zip([source]*m, targets))\n",
    "\n",
    "        repeated_nodes.extend(targets)\n",
    "        repeated_nodes.extend([source] * m)\n",
    "\n",
    "        targets = _random_subset(repeated_nodes, m)\n",
    "\n",
    "    return G\n",
    "\n",
    "def _random_subset(repeated_nodes, m):\n",
    "    \"\"\"Generates a random subset without repetition.\n",
    "    \n",
    "    repeated_nodes: sequence of nodes\n",
    "    m: number of nodes to sample\n",
    "    \n",
    "    returns: set of nodes\n",
    "    \"\"\"\n",
    "    targets = set()\n",
    "    while len(targets) < m:\n",
    "        x = random.choice(repeated_nodes)\n",
    "        targets.add(x)\n",
    "    return targets"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "I'll generate a BA graph with the same number of nodes and edges as the Facebook data:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(4039, 88234, 22)"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "n = len(fb)\n",
    "m = len(fb.edges())\n",
    "k = int(round(m/n))\n",
    "n, m, k"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Providing a random seed means we'll get the same graph every time."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "ba = barabasi_albert_graph(n, k, seed=15)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The number of edges is pretty close to what we asked for."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(4039, 88374, 21.880)"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(ba), len(ba.edges()), len(ba.edges())/len(ba)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "So the mean degree is about right."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(43.691, 43.760)"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.mean(degrees(fb)), np.mean(degrees(ba))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The standard deviation of degree is a bit lower than it should be (but much better than the WS model)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(52.414, 40.887)"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.std(degrees(fb)), np.std(degrees(ba))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's take a look at the degree distributions."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "pmf_fb = Pmf(degrees(fb))\n",
    "pmf_ba = Pmf(degrees(ba))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Looking at the PMFs on a linear scale, we see one difference, which is that the BA model has no nodes with degree less than `k`, which is 22."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nr3/9a23fvl3bt2/XuHHj0n6fZK4Gs2bNGg0dOrT9D5wDhfkOAEDX0dZyk86we/fuhmS5srJS119/\nfUNnnEgk9OUvf1nXXHON5s2bpwEDBuill17SxIkTdemll+q0007TZz/7WZ199tmqrq7WSy+9pOOO\nO65hRGTevHm65JJLNHz4cJWVlenzn/+8pPpylEmTJun555/XRz7yEd18883q1auXJk6cqGQyqaKi\nIs2ePVtXX321nn/+eT311FP6yU9+0hCzmem2227TV77yFU2dOlVPPPGEunXr1vk/PACx0NZyk1x7\n9NFHtWPHDp1wwglav369nn32WT399NM66aSTGtr87Gc/09y5cxtdpeXCCy/UT37yE33oQx9SZWWl\nfvWrXzV7v8rKSiUSCfXv3191dXWaO3eu3nzzzbQ2mzdv1i9/+UtdeeWVevjhh7Vs2TKdf/752Xng\nLGGkHECXkTmRR5Iuv/xyDRkyREOHDtVJJ52kM844I+347Nmzdfzxx+uDH/ygjjzySH3/+9+Xu6uk\npEQPP/ywfvzjH2vAgAEaNWqUZs+erbq6uoZ7XXrppfriF7+oYcOGyd31s5/9TJJ0wgknaO7cufr6\n17+ugQMHasGCBXrsscdUUFCg4uJiPf7443rkkUfUv39/XXPNNbr33nsbSmiCzzBnzhwNGjRIF1xw\nQcOKMAAQRVOnTlWvXr3Uu3dv/eAHP9C8efN03HHH6e6779Ypp5yic845RwMHDmz4c/XVV+uNN944\nZJUWSfrhD3+oYcOG6aijjtInPvEJXXjhhWkDG5m/K44//nhde+21mjRpkgYPHqy33nrrkN8VEydO\n1IoVK9S/f3/94Ac/0IMPPqg+ffo0er18YaInEDPNTRZC52Oi50Gt7bPry5ekOncVFjC2hHiIc999\n++236/7779dzzz3XrvPnzp2rOXPm6Pnnn89KPLnqtylfAQCExvrte3XDg29Jkob06a4ff+7EPEcE\nINs2bdqkd999V6eddpqWL1+um2++ucWVrKKApBwAEBqJwBhUXUxHDYGoq66u1owZM7Rq1Sr16dNH\n06dP15VXXpnvsHKO8hUgZuL8FWhXRPnKQa3psyt27tP3/1g/gWtgr2668aKTmm0PRAV9d9fBOuUA\ngNhLBCZkJetIUABER+ST8pWrN+u9dVtbbggA6PKM8hUAERX5mvLrZte/ovvfvvkZHXf04BZaAwC6\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f271d25b750>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "thinkplot.preplot(cols=2)\n",
    "\n",
    "thinkplot.Pdf(pmf_fb, label='Facebook')\n",
    "thinkplot.config(xlabel='degree', ylabel='PMF')\n",
    "\n",
    "thinkplot.subplot(2)\n",
    "\n",
    "thinkplot.Pdf(pmf_ba, label='BA graph')\n",
    "thinkplot.config(xlabel='degree', ylabel='PMF')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "If we look at the PMF on a log-log scale, the BA model looks pretty good for values bigger than about 20.  And it seems to follow a power law."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\ngAT+Dwtml7b5HdasAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f27210b5ad0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "thinkplot.preplot(cols=2)\n",
    "\n",
    "thinkplot.Pdf(pmf_fb, style='.', label='Facebook')\n",
    "thinkplot.config(xlabel='degree', ylabel='PMF')\n",
    "thinkplot.config(xscale='log', yscale='log')\n",
    "\n",
    "thinkplot.subplot(2)\n",
    "\n",
    "thinkplot.Pdf(pmf_ba, style='.', label='BA model')\n",
    "thinkplot.config(xlabel='degree', ylabel='PMF')\n",
    "thinkplot.config(xlim=[1, 1e4],\n",
    "                 xscale='log', yscale='log')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The characteristic path length is even smaller in the model than in the data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(3.686, 2.524)"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "L, estimate_path_length(ba)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "But the clustering coefficient isn't even close."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(0.602, 0.043)"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "C, average_clustering(ba)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In the BA model, the degree distribution is better than in the WS model, but the clustering coefficient is too low."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Cumulative distributions"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can get a better picture of these distributions, and the differences between the model and the data, by plotting CDFs instead of PMFs."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "cdf_fb = Cdf(degrees(fb), label='Facebook')\n",
    "cdf_ws = Cdf(degrees(ws), label='WS model')\n",
    "cdf_ba = Cdf(degrees(ba), label='BA model')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "If we plot them on a log-x scale, we get a sense of how well the models fit the central part of the distribution."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\njRs3qmfPnpKkRx55RMuXL9fAgQN1/fXX684779Svf/1rxWIxTZs2TUuXLtWFF16o++67T1deeaX+\n9re/6ciRI7riiit022236fe//73q6up01VVXae3atRo8eHB8zG+//bbGjRuniRMn6jvf+Y4n9wGA\nd3IpCWkW5tKQmbNXt31SDmbP9Oa3qcTv9mEGG2gnSkNSu+qqq1RWVqaysjJdffXVMjNNmzZN3bp1\nU5cuXXTPPffopZde0oEDB3TkyBHNmTNH999/v/r06SMz0wUXXKBOnTpp7ty5mjhxosaOHStJuvTS\nSzVs2DA99dRT8e81ffp0nXnmmeratau+//3va8GCBZKkBQsWaOLEiRo9erQ6deqku+++W3v37tWf\n//xnPffcczp8+LC++tWvqlOnTrr44ot1+eWXa/78+fHrbtmyRRdddJGmTZtGcg2EVH19fYv95gcZ\n0yXXlIa0jfjtHWawgXagNCS9RYsWtajhO3LkiO6++249+uijevvtt2VmMjPt3r1bpaWlOnz4cIuZ\nh2abNm3SvHnz9Nhjj0lq/FVlQ0ODxo8fHz9nwIAB8e1Bgwbp0KFDevfdd7V9+3YNGjQo/pqZqX//\n/tq2bZsOHz6sgQMHtvhegwYN0rZt2+L7S5YsUY8ePTRz5syO3xAAnkrV3zpTYi1RGpIt4rd3SLCB\nHIWxNKSZVyUdHZFcwzd37lw99dRTqqur04ABA/T222+rd+/ecs6pb9++6tKli1577bVW/zgOGDBA\nN910kx588MG032vLli3x7U2bNumYY45Rz5491a9fP/39739vMaatW7eqf//++vDDD7V58+YW19m8\nebOGDTv6d/jFL35RO3fu1Pjx4/XUU0/p2GOPbde9AOCtdA8z5pJcS+EqDWnmVUlHRxC/vUOJCJAD\nVmvM3fvvvx8PnB988IH+7d/+TWYmSSopKdGNN96oO++8U7t27dKRI0f0/PPP66OPPtLUqVP12GOP\n6emnn9aRI0d08OBB1dXVaefOnfFrz507V6+88oo++OAD1dTUaMqUKZKka6+9VosXL9bKlSvV0NCg\n++67T927d9f555+vCy64QJ07d9asWbPU0NCgFStW6Mknn9R1110Xv66Z6ec//7kGDx6sCRMm6NCh\nQ/m9aQBSSlUWUlFRkfFrkuuuKQ3JHvG7/UiwgRywWmNmzYE30YwZM3TSSSepX79+Ouuss3ThhRe2\neH3WrFkqLy/Xpz/9afXq1Uvf+ta35JzToEGD9Nhjj+nee+9V7969dcopp2jWrFk6cuRI/HtNnTpV\n//zP/6z+/fvLOaef/OQnkqShQ4dqzpw5uvXWW9WnTx8tX75cixcvVqdOndSlSxctWbJE//3f/60T\nTjhBd955p2pra+O/5kz8GR5++GH17dtXV199dfzJeADBiMVircpCUnUKSUTddfaI396y5F8HhJWZ\nuaiMFd6pra2Nb1dXVwc4ktaz10El12bW6td4CI90fz9Nx1v/C1agiNnwUnJpSGlpqaqqqjJ+Taq6\n6wenj/BtjNkgfoePXzGbGWwgC2GuuwaAQpaq7rqtshAp3C35UPhIsIEs0JIPAIKRXHfdVscQidIQ\nBI8uIkAbaMkHAPnXnnZ8Ei35EA7MYAMZUBoCAMFITq7basfXjNIQhAEJNpABpSEAEIzk5DqbumtK\nQxAWlIgAGVAaAgD5F4vFWuy31TGkWeLsNaUhCBIz2EAai1asbbFPcg0A/kvVki9bibPXlIYgSCTY\nQBqJ5SHHdOkc4EgAoHgkdw3JpjREaiwPScTsNYJEgg2kkNw5hNrrwjZnzhyNGjUqq3NnzJihe+65\nx+cRAcUp1WqN2TzYmKpzCArXH//4Rw0YMCCrc7/3ve9p6tSpPo+oNd6BQArJs9eUh7TtRz/6kcaP\nH9/i2Omnn65/+qd/anHsjDPO0G9/+1tJ0qJFi3T22WerR48e6tOnj8aOHatNmzblbcyJUi0TDCB/\nUpWGZJNcS3QO8cIpp5yibt26qXv37urVq5cmTJigbdu2tTqvpqZGJSUlevHFFwMY5VG5xOwg4jsJ\nNpCE2ev2ueiii7Rq1ar4krM7d+5UQ0ODXn755RbHXnvtNY0ePVqvvfaapk+frp/85Cfas2ePXn/9\ndd12223q1KlTkD8GgAC0d7VGic4hXjEzPf7449q7d6927NihPn366I477mh13iOPPKJevXpp7ty5\nAYwyOkiwgQT0vW6/c889Vx9++GH8H8lnnnlGY8aM0Zlnntni2Gmnnaa+fftqzZo1Gjx4sCorKyVJ\nH/vYxzRp0iSdfPLJKa8/Y8YM3XbbbRo/fryOO+44jRo1Srt27dJdd92lsrIyDR06VGvXHn0wdcOG\nDRozZox69uyps846S0uWLIm/9s477+jKK6/U8ccfr8985jN67bXXWnyvDRs26NJLL1WvXr1UXl6u\nhQsXenmrACRpz2qNEovKeK15MqRLly665pprtH79+havr1y5Ujt37tTPfvYz1dbWtijnSfa9731P\n1157raZOnaru3btr2LBhevXVV/WjH/1Iffv21aBBg/T000/Hz9+xY4cmTpyoXr166YwzztDs2bPj\nrx08eFA33nijysrKVFFR0Wr2fMeOHbrmmmvUp08fnXbaabr//vu9uB0dQps+IEHU+17X1tZ6er3q\n6uqsz+3cubPOP/98rVy5UmeffbZWrlypiy66SP379291TJJGjBihDRs26Ctf+YquvPJKnXvuufrY\nxz6W8XssXLhQy5cv19ChQ3X55Zdr5MiRuvfeezVr1izdc889uuuuu7RixQo1NDRowoQJmjlzpv7n\nf/5HzzzzjCZOnKiXXnpJp59+uv7lX/5F3bp1065du/Taa69p3LhxGjx4sCRp//79uvTSS/WDH/xA\ny5Yt07p16zR27FidddZZGjJkSPtvJoCU2lt3LRVWaUiQ8TvZ/v37tWDBAo0cObLF8blz52rChAmq\nqqrSHXfcoSVLlmjSpElpr7N06VItXrxYc+bM0YwZMzRu3DjdfPPN2r59u37961/rC1/4gv7xj39I\nkqZMmaJhw4Zp586dWr9+vS655BJ94hOfUGVlpWpqavT666/r9ddf1759+3TZZZfFv4dzThMmTNCk\nSZO0YMECbdmyRWPHjtWQIUN0ySWXtPsedBQz2EATlkTvuNGjR2vlypWSGmerR40apQsvvLDFsdGj\nR0uSTj31VNXV1Wn79u2aMmWKevfurRkzZmj//v1prz9p0iQNHz5cXbp00aRJk9S1a1fdcMMNMjNN\nmTIlPlO+atUqffDBB/rmN7+p0tJSjRkzRldccYVqa2t15MgR/e53v9O9996rY489Vp/85Cc1ffr0\n+PdYunSpTj31VE2bNk1mpmHDhmny5MnMYgM+SZy9zqXuWhKlIR676qqrVFZWph49eujpp5/W1772\ntfhrBw4c0MKFC3XDDTeotLRU11xzTZtlIqNGjdLYsWNVUlKiqqoq7d69W3fffbc6deqk6667Tps2\nbdLevXu1ZcsWrVq1Sv/xH/+hzp07a9iwYZo5c2b8+gsXLtS3v/1tHX/88erfv7++9KUvxb/HCy+8\noN27d+tb3/qWOnXqpFNOOUUzZ87U/Pnz/blJWSLBBprwYGPHXXTRRXr22Wf17rvvavfu3TrttNN0\nwQUX6Pnnn9e7776r+vr6+Ay2JJ133nmaP3++du3apWeeeUYrV67Uv//7v6e9ft++fePbXbt2bbW/\nb98+SY2/Lkx+wnzQoEHatm2b3nrrLTU0NLQoRRk0aFB8e9OmTfrTn/6ksrIylZWVqWfPnpo3b552\n7drV/hsDIK3E2ets664l2vL5YdGiRXrnnXd06NAh3X///brooov05ptvSpJ+97vfqXPnzrr88ssl\nSddff72eeOIJvf3222mvlxyjTzjhhPgDh127dpVzTvv27dOOHTtUVlambt26xc9vjtmStH379rQx\ne/Pmzdq2bVuLmP3DH/4wPu6gUCICqHAebOzIrwS9MHLkSO3Zs0e/+tWv9NnPflaSdNxxx6lfv376\n1a9+pf79+7cIjIk+/elP6+qrr25Vi9ke/fr105YtW1oc27x5s84880z17t1bpaWl2rJli84444z4\na80GDBigyspKLVu2rMPjAJBZ8oqN2c5eF2JbvqDjt3S0BtvMNGnSJN1yyy169tlndfXVV2vOnDna\nt2+fBg4cKOecnHNqaGjQvHnzUj4MmYt+/frpnXfe0QcffBAvFdy8ebP69+8vSTrppJO0ZcuW+Psj\nsdvUgAEDNHjwYL3yyisdGoPXov+OBDzA7LU3jj32WJ1zzjmaNWtWi77Sn/3sZzVr1qwWs9fPPfec\nZs+erbfeektS44OFixcvblXzl4vmfxzOP/98devWTffdd58aGhpUV1enpUuXqrq6WiUlJZo8ebJq\namp04MABrV+/XnPmzIlf44orrtDGjRv1m9/8Rg0NDTp8+LBWr14duuANFILk8pBsFVLtdVgtWrRI\ne/bs0dChQ7Vt2zatWLFCjz/+uNasWaO1a9dq3bp1+sY3vtEifrbXySefrAsuuED/+q//qkOHDmnd\nunV6+OGH4/2rr732Wv3whz/Unj17tHXrVj3wwAPxrz3vvPN03HHH6b777tPBgwf10Ucf6W9/+5tW\nr16d7tvlBQk2il6hzF6HxejRo/XWW2/pwgsvjB8bNWqU3nrrrXj9tST16NFDixcv1llnnaXu3btr\n/Pjxmjx5sr7+9a+nvG42fUybz+ncubOWLFmiJ554QieccIJuv/12PfLIIzr99NMlSffff7/ef/99\nnXTSSbrpppt00003xa/x8Y9/XMuXL9f8+fPVr18/9evXT3fffbcOHTrUrvsBILXkhxtpyxe8CRMm\nqHv37jr++OP1ne98R3PnztWQIUP0m9/8RiNGjNDFF1+sPn36xP986Utf0l//+tdW3UaylRjXa2tr\n9frrr6tfv36aPHmy7r33Xo0ZM0aS9N3vflcDBw7Uqaeeqssuu0zTpk2Lf11JSYmWLl2qNWvW6NRT\nT1WfPn108803a+/evR27GR1kzTM+YWdmLipjhXcSn6r269dn13/94XiCfUyXzpr348/78n28Ymbi\nsxBe6f5+mo4XzWo2xGy0ZeHChfEEu7S0VFVVVVl93W1z/hJPsI/pXKIHp4/wbYxeI36Hj18xmxls\nFDVmrwEg/7yavaY0BGFFgo2iRu01AORfe1vzJdZes6gMwowEG0WL2WsACEZ7W/Mxe42oIMFG0WL2\nGgDyryOt+RIxe40wI8FGUWL2GgCC4UVrvkLoe43CxjsURYnZawAIBg83ohiwkiOKTtRnrwcNGpRV\nT2gEI91KlQDaVx6SatXGqJaHEL/Dx6+YTYKN0EoOxF6J+uz1G2+8EfQQAKBd2lMeUkirNhK/iwcl\nIgit9tbpZRL12WsAiLJcy0NYtRFRRYKN0GpvG6dMoj57DQCFIpvyEPpeI6pIsBEJ2bZxyoTZawAI\nTq5lfzzYiCgjwUbRYPYaAIIRi8W0Zs2a+H42ZX/MXiPKSLBRNJi9BoBgJD5TI2VX9sfsNaKMBBtF\nYdGKtS32mb0GgPxJfKZm+PDhbZb9sWojoo4EG0UhuTwEABCM9jzcCEQN71oUPB5uBIDo4OFGFAIS\nbBQ8Hm4EgODk2j2EhxtRCEiwUdCYvQaAYOW6aBiz1ygEJNgoaMxeA0Cwclk0jIcbUShIsFGwmL0G\ngHDJ9IDjsnU7tfCFrfF9Hm5ElPHuRcFi9hoAgpVL/XVi7bVEeQiizfcE28wuM7MNZrbRzL6Z4vXu\nZrbYzNaY2V/N7Ea/x4TCx+w10D7EbHgp2/rr5M4hVeedTHkIIs3XBNvMSiQ9IGmcpE9KqjazIUmn\n3Sbpb8654ZLGSPrfZtb2UxBABsxeA7kjZsNLsVgs6/prOoeg0Pg9g32epFedc5ucc4clzZc0Mekc\nJ+m4pu3jJL3tnGsQ0AHMXgPtQsyGZ5JnrzPVX9M5BIXG7wS7v6QtCftbm44lekDSUDPbLmmtpC/7\nPCYUOJZFB9qNmA3PZDt7TecQFKIwPOQ4TtLLzrl+ks6W9KCZfTzgMSHCWBYd8BUxGznLNHvNsugo\nRH7XzW2TNDBh/+SmY4lmSPqhJDnnXjOz1yUNkbQ66TzV1NTEtysrK1VZWentaFEQKA9BGNTV1amu\nri7oYeSKmA1P5NI9hPIQhIHXMducc55drNXFzTpJekXSxZJ2SHpBUrVzLpZwzoOS3nTOfc/M+qox\nSA9zzr2TdC3n51gRPrW1tfHt6urqrL5m0Yq1mrtoVXz/0Z/e6vm4gPYwMznnLOhxZELMhlcWLlwY\nLxEpLS1VVVVVyvOSe1/PnsmkCMKhozHb1xls59xHZna7pOVqLEd52DkXM7NbGl92D0n6gaT/NLN1\nTV/2jeRADWSL8hCg/YjZ8EJHuocAhcL31krOuacknZl07JcJ2zvUWNMHdBjlIUDHELPRUXQPAcLx\nkCPgCbqHAEDw6B4CkGCjgFAeAgDhQvcQFCve0SgILI0OANGRvDQ65SEoNCTYKAgsjQ4A0cHS6Ch0\nJNgoCMxeA0B0MHuNQkeCjYLD7DUABCOXBWaaMXuNQkSCjchL7h4CAAhGcou+VJK7hwCFiAQbkUf3\nEAAIh2xa9NE9BMWAdzYij/prAAifdC36qL9GMSDBRqSxuAwAhEM29dcsLoNiQYKNyFq0Yq3mLloV\n36c8BACCk039NeUhKBa8uxFZibXXEuUhABCktuqvWVwGxYQEG5GVWHs9beJIykMAICDJ5SGp6q9Z\nXAbFhAQbkUTtNQCER1vlIcxeo9iQYCOSaM0HAOHRVnkIs9coNiTYiCRa8wFAOKUqD2H2GsWGBBuR\nQ3kIAEQHrflQjEiwETmUhwBAdNCaD8WIdzoiZdGKtZSHAECEUB6CYkSCjUhJnr2mPAQAwovyEBQr\nEmxECrPXABAumZZIpzwExYp3OyKDhxsBIHzS9cCm9zWKGQk2IoOHGwEgfNL1wKb3NYoZCTYigYcb\nASD8EntgM3uNYkaCjUjg4UYAiC5mr1FsSLARCcxeA0D4pHvAMbl7CFBsSLAROcxeA0A4pHvAke4h\nKHa86xF6O3e/F/QQAAAppHrAke4hAAk2ImD7m0cTbLqHAEA4NT/gSPcQgAQbIbdz93s6cuToTAj1\n1wAQDunqr5m9BkiwEXLJs9fUXwNAOKSrv07E7DWKFQk2Qo3ZawAIp3T11wBIsBEhzF4DQDilq78G\nihXvfoQW3UMAIDroHgIcRYKN0KJ7CABEB91DgKNIsBFKi1aspf4aACKC2WugJRJshNKCJ1fHt0tK\nSqi/BoAQY/YaaIkEG6GzaMVaHfrwcHy/X5/jAxwNAKAtzF4DLZFgI3SSZ69PPIEEGwCigtlrgAQb\nIcTsNQCEW+Iqjm/uPRjgSIBwIsFGqDF7DQDhk7iK4869RydF6H0NNOKTgFBZtGJt0EMAALSheRXH\nN/ce1L5jj9ZcU38NNCLBRqgk118DAMJr13uHdKBrY8013UOAo8hgEBp0DwGA6Hhz70EdcS6+z+w1\ncFRp0AMAmiXOXh/TpbNOPKFbgKMBAGSy671D8W1mr4GWmMFGKCTPXo87l5kQAAij5g4izF4D6ZFg\nIxSSZ6+72b74fmkpv2gBgLBI7CDimtIIZq+BlkiwEQqJs9dTLj8n/oS6JFVUVAQxJABAConxeX+3\n/gGOBAgvEmwELrk138TPDWuxX15ens/hAADa0Ly4THMHEQAtkWAjcMnlIQCAcEt+wBFAS3wqELjk\n8hAAQLjxgCOQGQk2QiW5PAQAEB6xWCxeHtKMBxyB1kiwAQBAVurr6+PlIU4llIcAafDJAAAAWWlo\naIiXh+zv1p/yECANEmwAAJCzA11PpDwESIMEG4FKbtEHAAiv5PprAKmRYCNQtOgDgOigPR+QHT4d\nCBQt+gAgGmKxGO35gCz5nmCb2WVmtsHMNprZN9OcU2lmL5tZvZn9we8xIZxo0QcEj5iNdOrr6+Pb\nTiXUXwMZlPp5cTMrkfSApIslbZf0opktcs5tSDjneEkPSrrUObfNzE7wc0wID+qvgXAhZiOT7e/s\ni2/v79Y/wJEA4ef3DPZ5kl51zm1yzh2WNF/SxKRzrpf0qHNumyQ553b7PCaEBPXXQOgQs5FWYv31\nke6UhwCZ+J1g95e0JWF/a9OxRGdIKjOzP5jZi2Y21ecxISSovwZCh5iNtKi/BrLna4lIlkoljZD0\nOUkfk7TKzFY55/4e7LDgp+TyEOqvgcggZhehZet2ttin/hrIzO8Ee5ukgQn7JzcdS7RV0m7n3EFJ\nB81spaRhkloF65qamvh2ZWWlKisrPR4u8oXyEBS6uro61dXVBT2MXBGzkdLil7fruKbtErNAxwL4\nweuYbS7hVz5eM7NOkl5R4wMzOyS9IKnaORdLOGeIpPslXSbpGEl/ljTFObc+6VrOz7EivyZ/+Rfx\n7WkTR7aawa6trY1vV1dX521cgF/MTM65UGcmxGykc8f9S/Wx/Y3VQyf1OFZfvmVGwCMC/NXRmO3r\nDLZz7iMzu13ScjXWez/snIuZ2S2NL7uHnHMbzGyZpHWSPpL0UHKgRmGhPAQIJ2I2Ulm2bqe67T/6\ni4x+ZR/tsPqeAAAXJklEQVQPcDRANPheg+2ce0rSmUnHfpm0/78k/S+/x4JwoDwECC9iNpI1locc\nkdRYHlJRURHwiIDwYyVH5B3dQwAgOg4dPhLf7nv8MSovLw9wNEA0kGAjrygPAYDoSO4e0qf7sQGN\nBIgWEmzkFeUhABAdi1/eHt+mewiQPRJs5BXlIQAQHcnlIQCyQ4KNwFAeAgDRQXkIkD0SbORNcv01\nACC8muuvux7Y2caZAJKRYCNvqL8GgOhorr/utn9bvP66tNT37r5AQSDBRt5Qfw0A0dFcf206Eq+/\npgc2kB0SbOQF7fkAIDrSteejBzaQHRJs5AXlIQAQHbTnAzqGBBt5QXkIAEQH7fmAjuFpBfhq0Yq1\nLWavJcpDACDMWL0R6DhmsOGrBU+ubjF7TXkIAIRbYnnIMZ1JE4D24JMDXyUn15SHAEC4JZaHXHl2\nvwBHAkQXJSLwTXLnkHk//nxAIwEAZCO5PGRg53f1TkBjAaKMGWz4hs4hABAtyeUh9fX18X0WmQGy\nR4IN39A5BACiJbk8pKGhIb7PIjNA9kiw4QsWlgGA6Fi2bqdum/OXFsfGferEFvssMgNkjwQbvqA8\nBACiY/HL21vMXtM9BOgYPkHwBeUhABAdyck13UOAjuGJBfiO8hAAiI4Hp48IeghA5DGDDc8l118D\nAMIruTUfgI7LmGCb2X8mbE/3fTQoCNRfA8EgZqM9WLkR8F5bn6TE3+1/2c+BoHBQfw0EhpiNnLFy\nI+C9thJsl5dRoGBRfw3kFTEbHZLYmi8WiwU4EiDa2nrI8WQz+5kkS9iOc859ybeRAQByRcyGZ1jF\nEWi/tj4xX0/YXp32LKAJDzgCgSJmIyeZHnBkFUeg/TIm2M65OfkaCAoDDzgCwSFmI1fZPuDIKo5A\nbtp8XNjMppvZX8zsg6Y/q81sWj4Gh+jhAUcgWMRs5IIHHAF/ZJzBbmrzdKekr0j6ixrr+kZI+rGZ\nOefcI/4PEVHFA45AfhGz0RGJDzgC6Ji2ZrC/KGmSc+4Pzrn3nHN7nHMrJE2WdJv/wwMA5ICYDQAh\n0NZDjt2dc28kH3TOvWFm3f0ZEqJo0Yq1LeqvAQSCmI2sLFu3s0X9NQBvtTWDfaCdr6HILHhydYv6\nax5wBAJBzEZWFr+8vUX9NSs4At5qawa73MzWpThukgb7MB5EVHJyzQOOQCCI2chKcnKd/IAji8wA\nHdNWgj1MUl9JW5KOD5CUvnkmitq8H38+6CEAxYqYjZw9OH1Eq2MsMgN0TFu/E/qJpPecc5sS/0h6\nr+k1AEB4ELPhCRaZATqmrQS7r3Pur8kHm46d4suIEDms3giEBjEbbcq0emMqLDID5K6tBLtHhte6\nejkQRBerNwKhQcxGm7JdvRFA+7X1yVptZjcnHzSzmZJe8mdIiBpWbwRCg5iNNrF6I+C/tp5cuFPS\nY2Z2g44G53MkdZE0yc+BIZpYvREIFDEbOWH1RsAfGRNs59wuSReY2RhJzU85PN60MhiKHIvLAOFC\nzEZbcq2/BtA+WfXecc79QdIffB4LIobFZYBwImYjHeqvgfzg04V2Y3EZAIgW6q+B/KB7PDzB4jIA\nEC3p6q9ZxRHoOGawAQBAHKs4Ah3HJwftwuIyABAdy9btbFF/nQmrOAIdxww22oXFZQAgOha/vL1F\n/XW2DziyiiPQPiTYaBcWlwGA6EhOrnnAEfAXJSLoMBaXAYDoeHD6iKCHABQ8ZrABAAAADzGDjZyw\neiMAREcuDzcC8A4z2MgJqzcCQHS09+FGAB3DJw05YfVGAIgOHm4EgkGJCNqN1RsBIDp4uBHIH2aw\nAQAAAA+RYCNrrN4IANGxbN3OoIcAFC0SbGSN1RsBIDoSu4fwcCOQX3zikDVWbwSA6Eh8wDHbhxtj\nsZhfwwGKiu8JtpldZmYbzGyjmX0zw3nnmtlhM7va7zGh41i9EShMxOzCNO5TJ2Z1Xn19fXy7tJQ+\nCEB7+Zpgm1mJpAckjZP0SUnVZjYkzXk/krTMz/EAANIjZqOhoSG+XVFREeBIgGjzewb7PEmvOuc2\nOecOS5ovaWKK8+6Q9F+S3vR5PACA9IjZiCsvLw96CEBk+f37n/6StiTsb1VjAI8zs36SrnLOjTGz\nFq8hHFgeHSgaxOwCwPLoQPDC8JDj/5GUWOdnQQ0EqbE8OoAExOyQY3l0IHh+z2BvkzQwYf/kpmOJ\nzpE038xM0gmSLjezw865xckXq6mpiW9XVlaqsrLS6/EiBZZHB3JXV1enurq6oIeRK2J2AWB5dCB3\nXsdsc855drFWFzfrJOkVSRdL2iHpBUnVzrmUfYDM7NeSljjnfpfiNefnWJHe5C//Ir796E9vzcv3\nrK2tjW9XV1fn5XsCfjIzOedCPdtLzC4MM2cfLembPTO3CRFiL9CoozHb1xls59xHZna7pOVqLEd5\n2DkXM7NbGl92DyV/iZ/jAQCkR8wGAG/43uTSOfeUpDOTjv0yzbk3+T0eAEB6xGwA6Di6yCMtuocA\nQHTQPQQIDx4tRlp0DwGA6KB7CBAefPqQFt1DACA66B4ChAclIsjKvB9/PughAACy9OD0ETmdH4vF\nVF9f79NogOLDDDYAAEWuvr5eDQ0N8f3SUubfgI4gwQYAoMglJ9cVFRUBjgaIPv4XFa3QPQQAosPr\n7iFVVVWeXQsoVsxgo5Wgu4fEYikXjQMApED3ECB8+BSilaC7hyQ+aEMdIABkRvcQIHzIXpBREN1D\nEmsBqQMEgOzl2j0EgD+YwUaolZeXBz0EAACAnJBgAwAAAB4iwQYAAAA8RA024mjPBwDR4XV7PgDe\nYQYbcUG35wMAZI/2fEB48WlEXNDt+QAA2aM9HxBelIggpSDa8wEA2of2fEC4MIMNAAAAeIgEGwAA\nAPAQCTYAAADgIRJsAACKWCwWC3oIQMEhwQYAoIjV19fHt0tL6X0AeIFPUpFrXlwmsUUfACC8vF5g\npqGhIb5dUVHh2XWBYsYMdpFLlVyzwAwAhJefC8yUl5d7di2gmJFgF7lUyTULzABAeLHADBB+lIgg\n7tGf3hr0EAAAOWCBGSCcmMEGAAAAPESCDQAAAHiIBBsAAADwEDXYRaq5PR8AIPyaW/MlPuAIILyY\nwS5Sye35aM0HAOGVKrn2sj0fAG/x6SxSyck1rfkAILxSJde05wPCixIRaN6PPx/0EAAAWZo9kwkR\nIOyYwQYAAAA8RIINAAAAeIgSkSLS3DkkeXl0AEA4NXcPARAtzGAXkVTJNd1DACC8kruH0DkEiAY+\nqUUkVXJN9xAACK/k5NrrziGxWMzT6wFoRIlIkXr0p7cGPQQAQA4enD7C82vW19fHt0tLSQkArzCD\nDQBAkWpoaIhvV1RUBDgSoLCQYAMAAJWXlwc9BKBgkGADAAAAHqLgqsDRmg8AoqW5NV/y8ugAooMZ\n7AJHaz4AiJZUyTXt+YBo4RNb4GjNBwDRkiq59ro9HwB/USJSRGjNBwDRMnsmEyJAFDGDDQAAAHiI\nBBsAAADwEAk2AAAA4CFqsAsQrfkAIFpozQcUFmawCxCt+QAgWmjNBxQWPr0FiNZ8ABAttOYDCgsl\nIgWO1nwAEC205gOijwQbAIAiE4vFVF9fH/QwgIJFiQgAAEWmvr5eDQ0N8f3SUubbAC+RYAMAUGSS\nk+uKiooARwMUHv6XFQCAIlZVVRX0EICCQ4JdIOh9DQDRQd9roLD5XiJiZpeZ2QYz22hm30zx+vVm\ntrbpz7NmdpbfYypE9L4G4AVidn6kS67pfQ0UBl8/yWZWIukBSeMkfVJStZkNSTrtH5Iucs4Nk/QD\nSb/yc0yFit7XADqKmJ0/6ZJrel8DhcHvEpHzJL3qnNskSWY2X9JESRuaT3DO/Snh/D9J6u/zmAoe\nva8BtBMxOwD0vQYKj9+/i+ovaUvC/lZlDsYzJT3p64gAAOkQswHAA6F5yNHMxkiaIenCoMcCAMiM\nmA0A6fmdYG+TNDBh/+SmYy2Y2ackPSTpMufcu+kuVlNTE9+urKxUZWWlV+MEAE/V1dWprq4u6GHk\nipgNoCh5HbPNOefZxVpd3KyTpFckXSxph6QXJFU752IJ5wyU9HtJU5Nq+5Kv5fwca9RN/vIv4ttR\nr8Gura2Nb1dXVwc4EsA7ZibnnAU9jkyI2fkzc/bq+HYQNdjEWSCzjsZsX2ewnXMfmdntkparsd77\nYedczMxuaXzZPSTpO5LKJP1fMzNJh51z5/k5rkJA32sAXiNm+4e+10Bx8b0G2zn3lKQzk479MmH7\nZkk3+z2OQpMuuab3NYCOIGb7g77XQHHhkx1R6ZJrel8DQPjQ9xooLqHpIoL2i3rNNQAUE/peA4WP\nGWwAAADAQyTYAAAAgIdIsAEAAAAPkWADAAAAHiLBBgAAADxEF5GIYGEZAIgOFpYBihsz2BHBwjIA\nEB0sLAMUNz7pEcHCMgAQHWFeWCYWiwU9BKDgUSISQSwsAwDREbaFZerr6+PbpaWkAYAfmMEGAKCI\nNDQ0xLcrKioCHAlQuEiwAQAoUuXl5UEPAShIJNgAAACAh0iwAQAAAA/xdEPI0O8aAKKFntcAkjGD\nHTJtJdf0vQaAcMmUXNP3GihOfPJDpq3kmr7XABAumZLrMPS9BpB/lIiEGP2uASBawtbzGkAwmMEG\nAAAAPESCDQAAAHiIBBsAAADwEAk2AAAA4CESbAAAAMBDdBEJCAvKAEC0sKAMgGwxgx0QFpQBgGhp\nK7lmURkAzYgGAWFBGQCIlraSaxaVAdCMEpEQYEEZAIgWFpQBkAkz2AAAAICHSLABAAAAD5FgAwAA\nAB6iBttHtOIDgOigDR8ArzCD7aNskmva8QFAOGSbXNOOD0BbiBI+yia5ph0fAIRDtsl1lNvxxWKx\noIcAFAVKRPKEVnwAEB2F2oavvr4+vl1aSgoA+IUZbAAAikRDQ0N8u6KiIsCRAIWNBBsAgCJUXl4e\n9BCAgkWCDQAAAHiIBBsAAADwEE84tBM9rgEgOuhxDSCfmMFup1ySa3pdA0Cwckmu6XMNoKOIIu2U\nS3JNr2sACFYuyXWU+1wDCAdKRDxAj2sAiI5C7XENIDyYwQYAAAA8RIINAAAAeIgEGwAAAPAQCTYA\nAADgoaJ/yJF+1gAQHfSzBhAFRT+D3dHkmh7X3orFYkEPAUCIdTS5psc1gHwo+kjT0eSaHtfeqq+v\nj2+Xlhb9L1gAJOlock2PawD5QAaTgH7WwWtoaIhvV1RUBDgSAGFHP2sAYVX0M9gIr/Ly8qCHAAAA\nkDMSbAAAAMBDJNgAAACAh0iwAQAAAA9F6iHHyV/+RdBDAABkaebs1UEPAQACwQx2E/pZA0B00M8a\nQJgRoUQ/awCIEvpZAwg730tEzOwySf9Hjcn8w865/0hxzs8kXS7pA0k3OufWpLsevaqzU1dXp8rK\nyqCHkZMgV3GM4v0KEvercHkds+lVnT0+V7nhfuWG+5Vfvs5gm1mJpAckjZP0SUnVZjYk6ZzLJZ3m\nnDtd0i2SKLT2QF1dXdBDyFmQqzhG8X4FiftVmIjZweJzlRvuV264X/nld4nIeZJedc5tcs4dljRf\n0sSkcyZKmitJzrk/SzrezPr6PK4W2vumy+brMp2T7rVsj7e17xc/7lcsFlNDQ4PWr18vKfUqjrne\ny0K+X9mek8t7jPsVzfvlMWJ2Ab5HuF+5a8/34n758zVe5VH5vl9+J9j9JW1J2N/adCzTOdtSnOMr\nEuzceH2/amtrtWZN42+Y169fr9LS0pSrOJJg535OmINPOtyvQBGzC/A9wv3KHQl2bkiwWzPnnKcX\nbHFxs8mSxjnnvtC0/8+SznPOfSnhnCWSfuice75p/2lJ33DO/SXpWv4NFADywDlnQY8hE2I2ABzV\nkZjtd6HrNkkDE/ZPbjqWfM6ANs4J/T9MAFAAiNkA4AG/S0RelPQJMxtkZl0kXSdpcdI5iyVNkyQz\n+4ykPc65XT6PCwDQGjEbADzg6wy2c+4jM7td0nIdbfkUM7NbGl92DznnnjCz8Wb2dzW2fJrh55gA\nAKkRswHAG77WYAMAAADFhpUcAQAAAA9FOsE2s25m9p9m9kszuz7o8YSdmZ1qZrPN7LdBjyUKzGyi\nmT1kZrVmdknQ4wk7MxtiZj83s9+aGUuuZqEphr1oZuODHks+ELNzQ8zODTE7N8Ts3OUSsyNdItLU\nQupd59zjZjbfOXdd0GOKAjP7rXPu2qDHERVm1kPSj51zNwc9ligwM5M0xzk3LeixhJ2ZfU/S+5LW\nO+eeCHo8fiNmtw8xOzfE7NwQs7OXS8wO1Qy2mT1sZrvMbF3S8cvMbIOZbTSzbya8dLKOLnjwUd4G\nGhLtuF9FrQP369uSHszPKMOjPffLzCZIWiqp4JPFZLneLzMbK2m9pLckRbKlHTE7N8Ts3BCzc0PM\nzo3vMds5F5o/ki6UNFzSuoRjJZL+LmmQpM6S1kga0vTaDZLGN23PC3r8Yb9fCecsDHrsUblfkn4k\n6XNBjz0q9yvhvKVBjz/s90vSDyTNkrRM0mNBjz9PPzMxm5jt6/0iZhOz/bpfucbsUM1gO+eelfRu\n0uHzJL3qnNvknDssab6kiU2vPSbpGjN7UNKS/I00HHK9X2ZWZmY/lzS8GGdJ2nG/7pB0sRrfY1/I\n62BDoB33a7SZ/dTMfiHp8fyONni53i/n3Ledc1+R9P8k/Sqvg/UIMTs3xOzcELNzQ8zOjd8x2++V\nHL3QX0d/pShJW9V4A+Sc2y/ppiAGFWKZ7tc7kr4YxKBCLNP9ul/S/UEMKsQy3a8/SvpjEIMKsbT3\nq5lzbm5eR+Q/YnZuiNm5IWbnhpidG89idqhmsAEAAICoi0KCvU3SwIT9k5uOITXuV264X7nhfuWm\nGO9XMf7MHcH9yg33Kzfcr9x4dr/CmGCbWj6d+aKkT5jZIDPrIuk6SYsDGVk4cb9yw/3KDfcrN8V4\nv4rxZ+4I7lduuF+54X7lxrf7FaoE28zmSXpe0hlmttnMZjjnPpJ0h6Tlkv4mab5zLhbkOMOC+5Ub\n7lduuF+5Kcb7VYw/c0dwv3LD/coN9ys3ft+vSC80AwAAAIRNqGawAQAAgKgjwQYAAAA8RIINAAAA\neIgEGwAAAPAQCTYAAADgIRJsAAAAwEMk2AAAAICHSLBRcMzsu2b2laDHAQBoGzEbhYgEG0jBzDoF\nPQYAQHaI2QgbEmwUBDP7lpm9YmYrJZ3ZdGywmT1pZi+a2R/N7IyE46vMbK2Z3Wtm7zcdH21mK81s\nkRqXSJWZ3WBmfzazv5jZz83Mmo5fYmbPm9lqM1tgZt2C+ckBIHqI2Sh0JNiIPDMbIelaSZ+S9E+S\nzm166SFJtzvnzpX0dUk/bzr+U0k/cc4Nk7RVkku43NmS7nDODTGzIZKmSLrAOTdC0hFJN5hZL0nf\nlnSxc+4cSS9J+qqfPyMAFApiNopBadADADwwStJjzrlDkg41zWZ0lXSBpIXNMxiSOjf9d6SkiU3b\n8yT9OOFaLzjnNjdtXyxphKQXm65xrKRdkj4jaaik55qOd5a0ypefDAAKDzEbBY8EG4XI1PjbmXeb\nZjGSuaRzE32Q9Noc59y3Wlzc7ApJy51zN3gxWAAocsRsFBxKRFAIVkq6ysyOMbPjJE1QY9B93cyu\naT7JzD7VtPknSc3Hr8tw3d9LusbMejd9fU8zG9j09Z81s9Oajnczs9M9/YkAoHARs1HwSLARec65\nlyUtkLRO0uOSXmh66QZJnzezNWZWL+nKpuN3SfqKma2RdJqk99JcN6bGur3lZrZW0nJJJzrndku6\nUVJt0/Hn1fSQDgAgM2I2ioE559o+CyggZtbVOXegaXuKpOucc5MCHhYAIAViNqKIGmwUo0+b2QNq\nrNd7V9JNAY8HAJAeMRuRwww2AAAA4CFqsAEAAAAPkWADAAAAHiLBBgAAADxEgg0AAAB4iAQbAAAA\n8BAJNgAAAOCh/w88zw1XMod0tQAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f271d1cff90>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "thinkplot.PrePlot(cols=2)\n",
    "\n",
    "thinkplot.Cdf(cdf_fb)\n",
    "thinkplot.Cdf(cdf_ws, color='gray')\n",
    "thinkplot.config(xlabel='degree', xscale='log',\n",
    "                 ylabel='CDF')\n",
    "\n",
    "thinkplot.subplot(2)\n",
    "\n",
    "thinkplot.Cdf(cdf_fb)\n",
    "thinkplot.Cdf(cdf_ba, color='gray')\n",
    "thinkplot.config(xlabel='degree', xscale='log',\n",
    "                 ylabel='CDF')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The WS model is hopeless.  The BA model is ok for values above the median, but not very good for smaller values.\n",
    "\n",
    "On a log-log scale, we see that the BA model fits the tail of the distribution reasonably well."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n178mnnvyySdVUVGhoUOHavr06dq2bVviuddff13V1dUaMmSIKisr9cwzz/T6s7zzzju67LLL9Pd/\n//dZ3Yvq6uqi3qKZmJ2bGRNG6qEbz9fihZNUO3l0r+Uo8SQ8lzIUyk0QR/zOX9wOxYw38ic+E97f\nLLjXZSjMvjgz986H83q9xx+4NS/XmTVrlpYuXaqSkhJ985vf1IIFC/TKK69Iku666y79+c9/1iuv\nvKLhw4dr48aNGjBggHbv3q2amhqtWLFC06dP17p163TVVVdp27ZtGjJkiCTp0Ucf1bp16zRmzBhd\nd911uuuuu/TII4+opaVFN9xwg5566ildcskluv/++zV79my99tpr6ujo0JVXXqnbbrtNv/nNbxSN\nRvXFL35Rmzdv1plnnpkY89tvv60ZM2aopqZGP/jBD/JyH4BsxWfC+5sFz6YMhXITf1i4eFNer7d4\n4aS8XIf4nR26mqBffmlJyK5q6aVbFe914n3GGWfo7bffTsygVVdX64knnuj2moMHD2rEiBE6evSo\nysrKNHjwYDU1NWn8+PHdXvfjH/9Y27dv15IlSxLnpk+frltuuUXz58/XlClTNHXq1MRCmj/84Q+6\n8MIL9f7776uurk5/+tOf9Otf/1pS56zNqFGj9B//8R86duyYFixYoF27diWue80116iqqkrf/e53\ntWDBAh1//PF66aWX9LWvfU133HFHxj8/XU26ELMLL58tCdlG3h3p4rfXiXexxm+6msAz8VKU3spQ\n4jPgbpSfVFRUJI6ZfQmexsZGHTp0SIcOHdITTzyhjo4Ofetb39JZZ52lk08+WWeffbaMMTp48KAO\nHDigtra2bjMVcTt27NDy5cs1dOhQDR06VEOGDNH//M//aN++fYnXnH766YnjsWPHqrW1VYcPH9be\nvXs1duzYxHPGGI0aNUp79uzR3r17NWbMmG6fNXbsWO3ZsyfxePXq1froo4+0cOHCfN4aIK/ipSi9\nlaE4LUGh3AQS8TufQlFqwkIdd6QrQ3FjN8zUxT7IXL5KQ3KROnOwbNkyPfvss4pGozr99NP19ttv\na/jw4bLW6tRTT9XAgQO1ffv2HjNsp59+um6++WY99NBDfX5W8qzHjh07VFZWpiFDhqi8vFx/+tOf\nuo1p9+7dGjVqlI4dO6adO3d2u87OnTtVWdn19/rrX/+69u/fryuuuELPPvusjj/++KzuBYsridlu\nSFeGkumOmKnlJuxm6b58lYbkgvjN4spuWKjjruQZ8LjWY22ae+fD9AFHxt59991EQD169Ki++93v\nypjO394NGDBAX/7yl3XXXXfpwIED6ujo0EsvvaSPPvpICxYs0JNPPqnnnntOHR0d+vDDDxWNRrV/\nf9fs3bJly/TGG2/o6NGjqqur07x58yR1/upx1apV2rBhg9rb23X//ffrxBNP1IUXXqiLL75YpaWl\nWrRokdrb27V+/XqtWbNG1157beK6xhj98pe/1JlnnqlZs2aptbU1q5+dxZXEbDf1NQPe2tbRbx/w\nSCTSbda7vb2dmW8UZfzOV9wOReINb9RMq0zbAYXkG3HxgJzspptu0mmnnaby8nKdd955uuSSS7o9\nv2jRIkUiEX3605/WsGHD9L3vfU/WWo0dO1ZPPvmk7rvvPg0fPlzjxo3TokWL1NHRkfisBQsW6Etf\n+pJGjRola61+/vOfS5LOPfdcLV26VLfeeqtGjBihdevWadWqVTruuOM0cOBArV69Wv/5n/+pU045\nRXfddZfq6+sTvy5N/hmWLFmiU089VVdddVVipT7gd/EEvK/yk76S74qKih7JN4oH8Tu/WFyJnKRb\neCnlf/El28b3jS2H/YvFlV2I2d7LdvElCy0Lh/jtP4WK26Go8YZ3kjfikToT8WWNGxOP47Pf8dcC\nALyVuhlPw8u7E8/FZ7/jr0tWUlKSmO1ubm4m8QayQKkJ8qpmWmWv3U8oPQEA/5kxYWSv3U9663yS\n2lmqpaXFtXECYUGpCQomdfZbyr30hFKTvvGrSv+i1KQLMdu/Ume/42onj07MfrOfQmEQv/2HPt5p\n1NXVFXVrLr+Kz34nY+El0NmWqti7mhCz/Sfd7Hd85ptZbxSrfMVtZrxRcH0twLyh5iLHM9/MePeN\nGRP/Ysa7CzE7GHqb/Y7PfDPrnX/Eb/9hxhuB1Vvfb4m6bwDwq/jsd7J43Xf7CV3nmfUGnCHxhmt6\nKz0h+QYAf+ot+W5t69Bvdpfq4HtdvbzZUAfIHO0E4ap4aUnyostljRu1rHFj3nt+AwByE19Umdr3\ne9uHQ7Tv8G6delKZRpx4vFpaWmgvCGSAGW+4rreZb4mFl/CfpUuXasqUKRm99qabbtIPf/jDAo8I\ncF/ylvNxHwwaqY+s0b4jH+ov73zIrDd84fnnn9fpp5+e0WvvvfdeLViwoMAj6onEG57oq9+3RPlJ\n2Pz0pz/VFVdc0e3c2WefrS984Qvdzp1zzjl67LHHJEmNjY2aOHGiTj75ZI0YMULTp0/Xjh07XBtz\nst62SwaKUWrXk/cHj5Ik7TvyofYeeo9a75AaN26cBg8erBNPPFHDhg3TrFmztGfPnh6vq6ur04AB\nA/TKK694MMouTmK2F/GdxBueiS+6fPyBW6n9DrFLL71UGzduTKwO379/v9rb2/Xqq692O7d9+3Zd\ndtll2r59u2688Ub9/Oc/15EjR/Tmm2/qtttu03HHHefljwFA3We/Pxg0UjaWRuw78qGee3GTx6ND\nIRhj9PTTT+udd97Rvn37NGLECN1+++09Xvfoo49q2LBhWrZsmQejDI5QJN70hA2+3spPVq4hiIfB\nBRdcoGPHjqmpqUmS9MILL2jq1Kn65Cc/2e3cWWedpVNPPVVNTU0688wzVV1dLUn62Mc+pjlz5mj0\n6NG9Xv+mm27SbbfdpiuuuEInnHCCpkyZogMHDujuu+/W0KFDde6552rz5q7/iNu6daumTp2qIUOG\n6LzzztPq1asTzx06dEizZ8/WSSedpL/5m7/R9u3bu33W1q1b9fnPf17Dhg1TJBJRQ0NDVveEPt7E\n7KCLz37HZ70lac+h91T/7MY070JQxSdJBg4cqKuvvlqvv/56t+c3bNig/fv361//9V9VX1+faDfZ\nm3vvvVfXXHONFixYoBNPPFGVlZX64x//qJ/+9Kc69dRTNXbsWD333HOJ1+/bt081NTUaNmyYzjnn\nHC1evDjx3Icffqgvf/nLGjp0qCoqKnrMtu/bt09XX321RowYobPOOksPPvhg1vcgX3E7FIsri/kL\nLExSF162HmtT4/rNLLbMg+T+5/ngpId6aWmpLrzwQm3YsEETJ07Uhg0bdOmll2rUqFE9zknS+eef\nr61bt+ob3/iGZs+erQsuuEAf+9jH0n5GQ0OD1q1bp3PPPVczZ87URRddpPvuu0+LFi3SD3/4Q919\n991av3692tvbNWvWLC1cuFD/9V//pRdeeEE1NTX63e9+p7PPPlt/+7d/q8GDB+vAgQPavn27ZsyY\noTPPPFOS9P777+vzn/+8/umf/klr167Vli1bNH36dJ133nkaP368o/tXXV2t6upq3XvvvY7eFxbE\n7HDoXHg5SevX7JFR58LLps1bNLT8jMSiTOTOy/id6v3339fKlSt10UUpv6VetkyzZs1SbW2tbr/9\ndq1evVpz5szp8zpPPfWUVq1apaVLl+qmm27SjBkz9JWvfEV79+7VI488oq9+9av685//LEmaN2+e\nKisrtX//fr3++uv63Oc+p0984hOqrq5WXV2d3nzzTb355pt67733dPnllyc+w1qrWbNmac6cOVq5\ncqV27dql6dOna/z48frc5z7n+GfPV9wOxYw3wqNmWmW3um9KTsLhsssu04YNGyR1zm5PmTJFl1xy\nSbdzl112mSTpjDPOUDQa1d69ezVv3jwNHz5cN910k95///0+rz9nzhxVVVVp4MCBmjNnjgYNGqTr\nr79exhjNmzcvMbO+ceNGHT16VN/+9rdVUlKiqVOn6sorr1R9fb06Ojr0xBNP6L777tPxxx+vT33q\nU7rxxhsTn/HUU0/pjDPO0A033CBjjCorKzV37tysZ72BMJgxYaSqKickHht16NkXf+fhiFAIX/zi\nFzV06FCdfPLJeu655/TNb34z8dwHH3yghoYGXX/99SopKdHVV1/db7nJlClTNH36dA0YMEC1tbU6\nePCgvvOd7+i4447Ttddeqx07duidd97Rrl27tHHjRv3Lv/yLSktLVVlZqYULFyau39DQoO9///s6\n6aSTNGrUKN1xxx2Jz3j55Zd18OBBfe9739Nxxx2ncePGaeHChVqxYkVhblKGSLzhO/NmTur2mOQ7\n+C699FK9+OKLOnz4sA4ePKizzjpLF198sV566SUdPnxYzc3NiRlvSZo8ebJWrFihAwcO6IUXXtCG\nDRv0z//8z31e/9RTT00cDxo0qMfj9957T1Lnrx1TV7yPHTtWe/bs0VtvvaX29vZuJS1jx45NHO/Y\nsUP//d//raFDh2ro0KEaMmSIli9frgMHDmR/Y4AQmH/5RRo19OOJxwPf7dpiHuHQ2NioQ4cOqbW1\nVQ8++KAuvfRS/eUvf5EkPfHEEyotLdXMmTMlSdddd52eeeYZvf32231eLzVGn3LKKYmFjoMGDZK1\nVu+995727dunoUOHavDgwYnXx2O2JO3du7fPmL1z507t2bOnW8z+yU9+khi3V0JRaoJw6avX98o1\nm3TBmDaNPOUkSaJvrAO5/GoxHy666CIdOXJEv/rVr/SZz3xGknTCCSeovLxcv/rVrzRq1KhuATPZ\npz/9aV111VV5aVdWXl6uXbt2dTu3c+dOffKTn9Tw4cNVUlKiXbt26Zxzzkk8F3f66aerurpaa9eu\nzXkcQNhMv2SSHl39vDqslVGHGl7erVWv7tXsieWUneTI6/gtddV4G2M0Z84cfe1rX9OLL76oq666\nSkuXLtV7772nMWPGyFora63a29u1fPnyXhdhOlFeXq5Dhw7p6NGjiZLDnTt3atSozrUFp512mnbt\n2pXIBZK7X51++uk688wz9cYbb+Q0hnxjxhu+1Ntiy9Zjbdq5/4j2H/yrJHZLC5Ljjz9ekyZN0qJF\ni7r1xf7MZz6jRYsWdZvt/u1vf6vFixfrrbfektS5oHHVqlU9agqdiH9pXHjhhRo8eLDuv/9+tbe3\nKxqN6qmnntL8+fM1YMAAzZ07V3V1dfrggw/0+uuva+nSpYlrXHnlldq2bZt+/etfq729XW1tbdq0\naZPvgjrghUgkolNPKut2rrWtMwFn9jtcGhsbdeTIEZ177rnas2eP1q9fr6efflpNTU3avHmztmzZ\nom9961vd4me2Ro8erYsvvlj/8A//oNbWVm3ZskVLlixJ9N++5ppr9JOf/ERHjhzR7t279Ytf/CLx\n3smTJ+uEE07Q/fffrw8//FAfffSRXnvtNW3a5G3jBhJv+FZvvb6PtB6v3fsPa//Bv6ZdNQ3/ueyy\ny/TWW2/pkksuSZybMmWK3nrrrUR9tySdfPLJWrVqlc477zydeOKJuuKKKzR37lzdc889vV43kz6s\n8deUlpZq9erVeuaZZ3TKKafo7/7u7/Too4/q7LPPliQ9+OCDevfdd3Xaaafp5ptv1s0335y4xsc/\n/nGtW7dOK1asUHl5ucrLy/Wd73xHra2tWd0PIGxGnHi8Tjv5eA0wRoM+6Eq2Sb6Db9asWTrxxBN1\n0kkn6Qc/+IGWLVum8ePH69e//rXOP/98ffazn9WIESMSf+644w794Q9/6NH9JFPJcb2+vl5vvvmm\nysvLNXfuXN13332aOnWqJOlHP/qRxowZozPOOEOXX365brjhhsT7BgwYoKeeekpNTU0644wzNGLE\nCH3lK1/RO++8k9vNyJGJzwQFlTHGBv1nQP8a129OlJ6M+/hhSdLokUN09+23ejksXzHGiH8L/tTX\n/zex80W1Qw8xO7waGhoSEyJ/eedD/enYcH0wqKvMpHbyaMpO+kD89p9CxW1mvBEIvZWe7N5/mEWX\nAOATFRUVieMRJx6vc44/3O15Zr4BEm8ESG/JNx1PAMAfIpGIqqqqEo9P+XiJPju6rdtrSL5R7EKR\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f271af3ed50>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "thinkplot.PrePlot(cols=2)\n",
    "\n",
    "thinkplot.Cdf(cdf_fb, complement=True)\n",
    "thinkplot.Cdf(cdf_ws, color='gray', complement=True)\n",
    "thinkplot.config(xlabel='degree', xscale='log',\n",
    "                 ylabel='CCDF', yscale='log')\n",
    "\n",
    "thinkplot.subplot(2)\n",
    "\n",
    "thinkplot.Cdf(cdf_fb, complement=True)\n",
    "thinkplot.Cdf(cdf_ba, color='gray', complement=True)\n",
    "thinkplot.config(xlabel='degree', xscale='log',\n",
    "                 ylabel='CCDF', yscale='log')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## HK model"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The Holme-Kim (HK) model is similar to the BA model, but it generates additional triangles in order to increase the clustering coefficient.\n",
    "\n",
    "Here's a slightly simplified version of the NetworkX function that generates BA graphs:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# modified version of the NetworkX implementation from\n",
    "# https://github.com/networkx/networkx/blob/master/networkx/generators/random_graphs.py\n",
    "\n",
    "def powerlaw_cluster_graph(n, m, p, seed=None):\n",
    "    \"\"\"Holme and Kim algorithm for growing graphs with powerlaw\n",
    "    degree distribution and approximate average clustering.\n",
    "    Parameters\n",
    "    ----------\n",
    "    n : int\n",
    "        the number of nodes\n",
    "    m : int\n",
    "        the number of random edges to add for each new node\n",
    "    p : float,\n",
    "        Probability of adding a triangle after adding a random edge\n",
    "    seed : int, optional\n",
    "        Seed for random number generator (default=None).\n",
    "    Notes\n",
    "    -----\n",
    "    The average clustering has a hard time getting above a certain\n",
    "    cutoff that depends on `m`.  This cutoff is often quite low.  The\n",
    "    transitivity (fraction of triangles to possible triangles) seems to\n",
    "    decrease with network size.\n",
    "    It is essentially the Barabási–Albert (BA) growth model with an\n",
    "    extra step that each random edge is followed by a chance of\n",
    "    making an edge to one of its neighbors too (and thus a triangle).\n",
    "    This algorithm improves on BA in the sense that it enables a\n",
    "    higher average clustering to be attained if desired.\n",
    "    It seems possible to have a disconnected graph with this algorithm\n",
    "    since the initial `m` nodes may not be all linked to a new node\n",
    "    on the first iteration like the BA model.\n",
    "    Raises\n",
    "    ------\n",
    "    NetworkXError\n",
    "        If `m` does not satisfy ``1 <= m <= n`` or `p` does not\n",
    "        satisfy ``0 <= p <= 1``.\n",
    "    References\n",
    "    ----------\n",
    "    .. [1] P. Holme and B. J. Kim,\n",
    "       \"Growing scale-free networks with tunable clustering\",\n",
    "       Phys. Rev. E, 65, 026107, 2002.\n",
    "    \"\"\"\n",
    "\n",
    "    if m < 1 or n < m:\n",
    "        raise nx.NetworkXError(\\\n",
    "              \"NetworkXError must have m>1 and m<n, m=%d,n=%d\"%(m,n))\n",
    "\n",
    "    if p > 1 or p < 0:\n",
    "        raise nx.NetworkXError(\\\n",
    "              \"NetworkXError p must be in [0,1], p=%f\"%(p))\n",
    "    if seed is not None:\n",
    "        random.seed(seed)\n",
    "\n",
    "    G = nx.empty_graph(m) # add m initial nodes (m0 in barabasi-speak)\n",
    "    G.name=\"Powerlaw-Cluster Graph\"\n",
    "    repeated_nodes = list(G.nodes()) # list of existing nodes to sample from\n",
    "                           # with nodes repeated once for each adjacent edge\n",
    "        \n",
    "    for source in range(m, n):\n",
    "        possible_targets = _random_subset(repeated_nodes,m)\n",
    "        # do one preferential attachment for new node\n",
    "        target=possible_targets.pop()\n",
    "        G.add_edge(source,target)\n",
    "        repeated_nodes.append(target) # add one node to list for each new link\n",
    "        count=1\n",
    "        while count<m:  # add m-1 more new links\n",
    "            if random.random()<p: # clustering step: add triangle\n",
    "                neighborhood=[nbr for nbr in G.neighbors(target) \\\n",
    "                               if not G.has_edge(source,nbr) \\\n",
    "                               and not nbr==source]\n",
    "                if neighborhood: # if there is a neighbor without a link\n",
    "                    nbr=random.choice(neighborhood)\n",
    "                    G.add_edge(source,nbr) # add triangle\n",
    "                    repeated_nodes.append(nbr)\n",
    "                    count=count+1\n",
    "                    continue # go to top of while loop\n",
    "            # else do preferential attachment step if above fails\n",
    "            target=possible_targets.pop()\n",
    "            G.add_edge(source,target)\n",
    "            repeated_nodes.append(target)\n",
    "            count=count+1\n",
    "\n",
    "        repeated_nodes.extend([source]*m)  # add source node to list m times\n",
    "    return G"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(4039, 88234, 22)"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "n = len(fb)\n",
    "m = len(fb.edges())\n",
    "k = int(round(m / n))\n",
    "n, m, k"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(4039, 88354)"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "hk = powerlaw_cluster_graph(n, k, 1.0, seed=15)\n",
    "len(hk), len(hk.edges())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The clustering coefficient is better than in the BA model, but still subtantially lower than in the dataset."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(0.602, 0.232)"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "C, average_clustering(hk)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The path lengths are very short."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(3.686, 2.806)"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "L, estimate_path_length(hk)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The mean degree is about right, but the standard deviation is a little low."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(43.691, 43.750)"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.mean(degrees(fb)), np.mean(degrees(hk))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(52.414, 41.495)"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.std(degrees(fb)), np.std(degrees(hk))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The distribution of degrees is pretty much the same as from the BA model.  It doesn't fit the lower and central parts of the distribution well."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "cdf_hk = Cdf(degrees(hk), label='HK model')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nKdCLiGS4/w/bv8ZN/2RvsQAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f271afe3090>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "thinkplot.Cdf(cdf_fb)\n",
    "thinkplot.Cdf(cdf_ba)\n",
    "thinkplot.Cdf(cdf_hk, color='gray')\n",
    "thinkplot.config(xscale='log')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "But it fits the tail of the distribution reasonably well."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYAAAAEHCAYAAACncpHfAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xt0VPW5N/DvM+RCIgSSYO4QQEuJhgSEgri8DJea4NuQ\nt2KgoQZbEIt2iegpS2urJuIr9LCKx6OobcnxBSzRUuuJILdTeAPliAdoTQIayk25JASFhEsgV/J7\n/0hmZ2Yyk8xM5rJn5vtZi7Wy9+w982Nzeeb3/C6PKKVARETBx+DrBhARkW8wABARBSkGACKiIMUA\nQEQUpBgAiIiCFAMAEVGQYgAgIgpSDABEREEqxNMfICKRAN4C0Axgt1Jqg6c/k4iIeueNHsCDADYq\npX4GYKYXPo+IiBzgdAAQkWIROS8ilVbns0XkiIgcFZFnzV5KAXCm8+cbfWgrERG5kSs9gHcBZJmf\nEBEDgDc7z98OIF9ERne+fAYdQQAAxMV2EhGRmzkdAJRSewHUW52eCOCYUuqUUqoVwPsAcjtf+wjA\nQyKyGsCmvjSWiIjcx12DwMnoSvMAwFl0BAUopa4DmN/TzSLCLUmJiFyglHI5s+LxWUCOenDx2x59\n/y8/24zb7vyBR+89emALXnllGXKnZtq9prCwEIWFhX06b32ut2NnlZSU9HrNn//8Zzz00EOoOH1J\nOyeGfsgYMwb52ZN7vNfR9vV2XU+vO/LcHDnX12fpKFc/x5n7fPE83f130xF9+QxvPE93/lsX6VtW\n3V0BoBrAMLPjlM5zunFzyiiP3xudeCvWle7DutJ9dq/59uwVHHrqnW7nL9VeQ+muim7Bw2g0drvW\n+pyta/oiPz+/12sSExNhNBpRufL3UO0dY/uq/QYqDx3qNQA42t7eruvpdUeemzPnPM3Vz3TmPl88\nT396ls7e6+rzdOa8p5+nuFIQRkSGA9iklBrTedwPwD8BTANwDsB+APlKqSoH30+99NJLMBqNPvkL\n05PSXRX4YOtBNLe0+uTzw8NCMWfGhB57Fda89a0VAEq27UPloUNaEAAc7wn4A28+y2DA5+keZWVl\nKCsrQ1FRUZ9SQE4HABHZAMAIIBbAeQAvKaXeFZEZAP4NHQPLxUqpFU68p/L3ymS+DBTWQaKsrMzr\ngfSXZj0BoCMILF/6mFfb4Am+eJaBjM/TvUTEuwHAEwIhAPSFu4OHK72GvrLVE8jMHBsQvQAivQqY\nAKDXFJAv+WNgMO8JBEovINgMHz4cp06d8nUzyExqaiq+/vpr7dhnKSBPCPYeQF+4GiQ8FQxKtu1D\nRUW5dsxegP/p/Fbp62aQGXt/JgHTA9BDOwKBKwHB3cGAvQD/xgCgPwEfAJgC8ixHAoO7AoF1LyCQ\nZgUFAwYA/bH+M2EKiFzmTC/B1aBgPSvIIIKCnPuQlpbmdHvJuxgA9CfgewB6aEcwcjQYOBsIbM0K\nSo4ZgCcXFvSpveR5DAAd7rnnHixcuBDz5s1z6/sWFBTgO9/5Dl588UWH7/FUAGBFsCCXOzUTG1Yu\nwLzcyQgPC7V7XXNLK9aV7sOsp97BrKfewdylxSjdVWH3+vzsyVi+9DE0D+xaIF5d14CSbfZXSRP1\nZvjw4YiMjERUVBQGDhyIqKgo1NbW+rpZfks3ewEVFhZyDMCHcqdmdvt231PvwBQQPth6sMeeQfbd\n47Fr61kI2gEAhyorEHL1LNLT05kOIqeJCD755BNMmTLF103xKdMYQF/ppgdgCgCkH470Dsx7BrZ6\nBVkZCRibmaEdtyuFz7+6iB17PkNVlUM7hRBZsE6FKKWQl5eHxMRExMTEYOrUqThy5Ij2emNjI55+\n+mmkpqYiOjoaRqMRra0dX2r++7//G5MnT0Z0dDTuuOMO/O1vf7N476NHj+J73/seoqOjMWvWLFy+\nfFl77aOPPkJ6ejpiYmIwffp0HD16VHvtyy+/hNFoRHR0NDIzM7Flyxabv5crV67gvvvuw7/8y784\n9QyMRqNbttTQTQAg/TIFgg9fX4QPX19kNyCYgoF1IMjPnozmgcOgOv+6tSuFc5ea8Ne9B732e6DA\nlpOTgxMnTqC2thbp6ekoKOgaa1qyZAkOHz6MAwcOoK6uDq+++ioMBgPOnj2L3NxcLFu2DPX19Vix\nYgUefPBB1Nd3lTtZv3493nvvPdTU1KC9vR1LliwBAFRVVWHevHlYvXo1vv32W0ybNg0zZ87EjRs3\n0Nraih/84AfIycnBhQsXsGrVKsyZMwcnT560aPPFixcxdepUTJ8+Hb/97W+986CscBCYXNbbALL5\nwPH2ylp8/HkNDFdqcNP1jtIRnBmkTz0NAs+ysZNtX3z4+iKnrh8xYgQuXryIkJCO7LXRaMRf/vIX\ni2suXLiAuLg4XLt2DeHh4YiMjER5eTlGjx5tcd2rr76KEydOoLi4WDs3ffp0LFiwAPn5+bjnnnsw\nZcoUvPzyywCAQ4cOYdKkSbh+/ToKCwtx/PhxvPfeewA6eiHJycn485//jJaWFhQUFODMma4SKbNn\nz8bYsWPx/PPPo6CgAP3798enn36Kn/3sZ1i8eHGvv29PDQJzDIBcZj5uYCsYWI8TrH7kDmyvTMKu\nrdUQtKNdKezY8xkAMAiQw0pLSy3GANrb2/Hcc8/hww8/xMWLFyEiEBFcuHABISEhaG1txciRI7u9\nz6lTp7BhwwZ89NFHADr+E29ra8MDDzygXTN06FDt59TUVDQ3N6O+vh41NTVITU3VXhMRJCcno7q6\nGq2trRg2zHx3/I57q6u7dsjftGkTBg8ejEcffdSlZ8AxANKVnsYLzFNDTRfOo2VgivYaU0HkLOtv\nwuvWrcO2bdtQVlaGS5cu4fjx41BKQSmF+Ph4hIWF4cSJE93eZ+jQoZg/fz7q6upQV1eH+vp6XL16\nFc8884x2jfm3+FOnTiE8PBzR0dFISkqy2C9JKYWzZ88iOTkZSUlJOH36tMVnnT59GsnJydrx448/\njilTpuCBBx5AU1OT08/AXWMAuukBUGAw9Qp66hFcQgT6h/fHqIENCA8Lwbn6a6iqqmIvwA84m7Lx\nhqtXr2r/MV+7dg3PP/+8VinLYDDgJz/5CZYsWYJ169bh5ptvxmeffYZJkyahoKAAkydPxg9/+ENM\nnToVLS0t+OyzzzB69GgkJCQA6AguP/7xj5GSkoLCwkLMmTMHQEdK584778SePXtw11134be//S2i\noqIwadIk3LhxA6GhoVi1ahUWL16MPXv2YOvWrVi+fLnWZhHB22+/jfnz5yMnJwebN29GeHi415+d\nbnoAFFh66hEMRiOamg241tSGy1cb0djcyllB5BBbJRB/+tOfIjExEUlJSRgzZgzuvvtui9dXrVqF\ntLQ0jB8/HrGxsfjVr34FpRRSU1Px0UcfYdmyZbj55psxfPhwrFq1Cu3t7dpnFRQU4OGHH0ZycjKU\nUnjttdcAALfddhvWrl2LRYsWIS4uDjt27MDHH3+Mfv36ISwsDJs2bcJ//ud/YsiQIViyZAlKSkq0\nNJT576G4uBjx8fF48MEHtZlJ3sRBYPIKWz2CpvAwDA3rqCksABIGR+KlX+jvG2aw4Upg/Qn4rSC4\nGVzwMAWD8y0hCAtvR2pY17S7pKG34MWf5fqwdcQAoD/cDI4CTumuCry95RCGhX8Lg3T9+V9pi8Sc\n+yd7taIZdWEA0J+A7wHooR3kGy//rhQ1Z7pmaQgUmpr64X8/MIVBwAcYAPSHAYAC2su/K8W5Mydg\n+lsQptpwtTkMzTLQ6/WNgx0DgP4wAFDAe/qtT4CLJ9HY3DFQbAoCV1r7A/BNsftgxACgP9wOmgJe\n9t3j0TZ4BCLCQyEAWiQEN4V3X0fQ0zbUROQ49gBIV7ZX1mLz7oO46foZNLe0oam5FReb+uNGq+V3\nFfYGPIc9AP0J+B5AYWGhW/a2IP+WlZGAH9w3AQoGhIeFYNDACIy8WZB5W6LFdewNUDArKytzy1YQ\n7AGQLlkXlgeAyMFJOHL8QrfdR9kbcC/2ANxj9+7dePjhhy32E7KnqKgIx48fx/r1622+HvA9ACJz\n+dmTkZk51uJc0+VzeGH+XZiXO9niPHsDwcO8JGRsbCxycnIsdtk0KSwshMFgwIEDB3zQyi62tq5w\nx7XuwgBAumUdBNqVwl/3HkTu1EybewzZKkZDgcVUEvLKlSs4d+4c4uLi8OSTT3a7bv369YiNjcW6\ndet80Er/wQBAumaqJmZi2jnUfLM5c+wNBD5TKiQsLAwPPfQQvvzyS4vX9+zZg9raWvz7v/87SkpK\n0NbWZve9ioqKMHv2bBQUFCAqKgqZmZk4duwYVqxYgfj4eKSmpuKvf/2rdv25c+eQm5uL2NhYjBo1\nCmvWrNFea2pqwk9+8hPExMQgPT29W+/j3LlzeOihhxAXF4dbbrkFb7zxhjseR58wAJDuZd893qKc\npPnOoT31BhgEAtv169fxwQcfYPJkyy8B69atQ05ODvLy8gB0FF/pyebNm/HII4/g0qVLGDt2LLKy\nsqCUQk1NDV544QU89thj2rVz5szBsGHDUFtbi40bN+L555/XJq8UFhbiq6++wldffYXt27dj7dq1\n2n1KKeTk5GDcuHE4d+4cdu7ciddffx3/9V//5aan4RoOApNfePqtTxB+tavIRuLg/rj/3jstagiU\n7qrAutJ9FvdxgNh5PQ0CP7rGvcV71jw6wanrzUtCNjQ0IC4uDtu3b8ftt98OoKMAfEJCAt577z3k\n5ORg0aJFOH/+vFb1y1pRURE+/fRTbN++HUBHMJg7dy4uX74MEUFDQwMGDRqE+vp6XL58GSNHjsTl\ny5cRGRkJAHj++edRW1uL//iP/8Att9yCd955B9///vcBAH/4wx+wbNkynD59Gv/zP/+DOXPm4Ouv\nv9Y+e8WKFTh27BiKi4tRVFSEEydO2E1ZcRCYglr23eNxLbKrPJ+tSmKm3oA5poQCT2lpKerq6tDc\n3Iw33ngD9957L7755hsAwF/+8heEhoZixowZAIC5c+diy5YtuHjxot33i4+P136OiIjAkCFDtAHZ\niIgIKKXQ0NCAc+fOISYmRvvPH7As9VhTU4OUlBSL10xOnz6N6upqxMTEICYmBtHR0Vi+fLnWbl9h\nACC/YFofYBEEOscDzDElFPhM34RFBD/84Q/Rr18/7N27FwCwdu1aNDQ0YNiwYUhMTMTs2bPR1taG\nDRs29Plzk5KSUFdXh2vXrmnnzEs9JiYmdishaTJ06FCMHDnSovzk5cuXe01PeRpLQpLfyMpIADCh\n16Ly5mUpzVNCpp+ZDnKdsykbTystLcWlS5dw2223obq6Grt27cL27dsxZswY7ZrXXnsNa9eutTlb\nyBkpKSm466678Mtf/hIrV67EP//5TxQXF6OkpARAR5nI5cuXY+LEiWhoaMCbb76p3Ttx4kQMHDgQ\n//qv/4rFixcjNDQUR44cQWNjIyZM8N0z1U0PgCuByRFZGQndisqv37QbJdv2dbvWVkqIPQH/l5OT\ng6ioKAwaNAgvvPAC1q1bh9GjR+O9997DHXfcgWnTpiEuLk77tXjxYhw6dKjbbCFHmc/PLykpwVdf\nfYWkpCTMmjULy5Ytw5QpUwAAL730EoYNG4YRI0YgOzsb8+bN0+4zGAzYvHkzysvLMWLECMTFxWHh\nwoW4cuWKS23iSmAKWub7BZmIoR+WL33M5vW2Bofn5bLgjD1cCaw/3A6ayMz2ylps2/t3i5lByTED\nMP3uCRbpIBPOEHIcA4D+cBYQkZmsjAS89sT/ghj6aeeq6xq6zQwy4Qwhou4YAMivZYwZoy0SA2zP\nDDLhDCEiS0wBkd/bXlmLXVtLIWgHABhEMCYjE/nZk+3ew3EB+5gC0h+mgIjssJ4Z1K4UDlVW2O0J\nAJwhRAQwAFCAyL57vMWmcaadQ3tiLwhwR1EKFgwAFBBMg8K2dg7tCQeHKZgxAFBA6WnnUHs4OEzB\nigGAAoqtlcKOBgFb9QU+2Ore3S8puBgMBpw8ebLX63bv3o2hQ4f2ep27eTQAiMgIEVkjIn/y5OcQ\nmXNk51B7rFNCzS2t7AXoyIgRI7Br1y6Lc2vXrsU999xj95r3338fMTEx+Nvf/ua1dpoEdUlIpdRX\nSqlHPfkZRNZs7RxaXddgc78gW3KnZlqkg5gK0j97/3maNoHbunWrRZDwFr1Pp3UoAIhIsYicF5FK\nq/PZInJERI6KyLOeaSKR80xBwHyRWG9TQ83NmWG5QyODgP/53e9+h6VLl2LHjh2YNGmSzWtMqZeV\nK1ciPj4eycnJKC0txdatW/Hd734XQ4YMwfLly7XrW1pasGTJEiQnJyMlJQVPP/00WltbtddXrlyJ\npKQkpKSk4N1337UITC0tLfjFL36B1NRUJCYm4oknnkBzc7PnHoADHO0BvAsgy/yEiBgAvNl5/nYA\n+SIyuvO1AhFZJSKJpsvd1F4ih2VlJGBsZoZ27OigMMB1Av7E1rfst956C4WFhdi1axfGjRvX4/21\ntbVoaWlBTU0NioqKsHDhQvzxj3/E559/jj179mDZsmXa3v6vvPIK9u/fj8rKSlRUVGD//v145ZVX\nAADbtm3DqlWrsHPnThw7dsyiljAAPPvsszh+/DgqKytx/PhxVFdX4+WXX3bTU3CNwyuBRSQVwCal\nVEbn8Z0AXlJKzeg8fg6AUkr9xuyeGAD/B8B0AGvMX7N6b64EJo+xLieZHDMATy4scOjeYFwx3NNK\nYNPe9+6Sn5/v1PXmJSFNmpubMX78eOzZs0e7pr6+HlOmTLFbCtJk9+7deOCBB9DQ0KCVgIyKisL+\n/fu1ffonTJiAF198ETNnzsStt96K1atXIyur4/vwjh07sGjRIpw8eRILFixAfHw8Xn31VQDAsWPH\n8N3vfhfHjx/HyJEjMWDAABw6dAgjRowAAOzbtw8//vGPcfLkSezevRsFBQU4ffq0zXbqcSVwMoAz\nZsdnO89plFJ1SqnHlVLfsfefP5GndRsUdmB9gAl7AvpjKglp+vXWW291u+btt9/G0aNHsWDBgl7f\nLzY21qIEJADExcVpr0dERKChoQFAR9nHYcO61pqkpqaipqZGe818Jo95Schvv/0W169fx/jx47Wy\nkDNmzOixVKU36KYimHlxA6PRCKPR6LO2UGCxVUls/abdGHPqUo/7BZmYvu2zupg+OJItiI+Px86d\nO3HvvffiiSeesBkkXJGUlIRTp05pW46fOnUKSUlJAGyXhDQFliFDhiAyMhJffPEFEhMTu7+xg8rK\nytxaOKsvAaAawDCz45TOcy5xR3UbInuyMhKwbW+KlgpqVwoVFeW4cOa43RoC5hgEOjibsvGlhIQE\n7Ny5E0ajEc888wxWrVrV5/fMz8/HK6+8oqWHli1bhoKCjnTi7NmzMX/+fBQUFCA1NdUivy8iWLhw\nIZYsWYI333wTN998M6qrq/HFF1/g/vvvd/jzrb8cFxUV9en340wKSGA5mHsAwK0ikioiYQB+BODj\nPrWGyIOs9wsCOqaHcmDYfzgyV978mqFDh2Lnzp348MMP8atf/cqlzzA//vWvf40JEyYgIyMDmZmZ\nmDBhgva+2dnZWLJkCaZOnYpRo0Zh2rRpFu/zm9/8BrfeeivuvPNODB48GPfffz+OHj3qUJs8xaFB\nYBHZAMAIIBbAeXQM/r4rIjMA/Bs6AkmxUmqFS40QUS+99BJTP+QVJdv2obyi0mL76HEjYpGXl+fQ\n/dYDw+Fhodiwsvdcs7/gdtD6Y/1nYkoFFRUVsSQkkbOs6wonDu6P+++9s9dUkIl1EPjw9UUeaacv\nMADojx5nAblVYWGhWwc3iHqSlZGA9qgkbaGYo3sGmVjn/ZkGIm8qKytzy7gpewAUtKx7AYBzawTm\nLi1Gc0vXKtBAWR/AHoD+BHwPgMjb+rpnkPV2Edw5lPwNAwAFNVt7BlVUlDsUBLhzKPk73QQAjgGQ\nr1jvGQQAlYcOOXQvdw4lX+AYAJGblWzbh4qKcu04M3OsQyuFA21aKMcA9IdjAEQelp89GWLopx0H\nayooNTUVIsJfOvplvq+QO+lqLyAuBCNfyxgzxqIXYPq5t55A7tRMfLD1oDYryJ+3ifj666993QTq\nhbv2BGIKiMiKdSpIDP2wfOljvd4XaKkg0j+mgIjcLD97MjIzx2rHqv1GUKaCKPAxABDZ0JfxAM4K\nIn/BAEBkR8aYMRbHjgYBLhAjf6GbAMB1AKQ31qkgwLEgwFQQeRrXARB5ifWgsIIBU2fkdlYas898\nryAOCJMncBCYyMOsewKCdmzb+/de7zNPBbEXQHrEAEDkgPzsyUiOGaAdh109i+2VtT3eYz0gzLEA\n0hsGACIHTb97Agyd5QEF7di8+2CvQYC9ANIz3QQADgKT3qWlpSEx+ibtOPJ6NTbu77knwF4AeQIH\ngYl8oKqqCjv2fIZzl5oAANcih6IxIgF5E1PsDgoHcvlI8i0OAhN5UVpaGpJiBiBxcH8AwE3XzyCi\nsRYff15j9x6WjyS9YgAgclJ6ejriovprQSDyejWaW9t7TAUxDUR6xABA5KS0tDSMHTsWcVH9YRCB\noB0RjbU9jgdYDwYT6QEDAJEL0tLSEBISgvhB4QA6egEA7KaCmAYiPWIAIHKReSpI0I7Yi3+H4UoN\nfr72HzZ7AkwDkd7oJgBwGij5G1MvwDwVZBoPsNUTYBqI3IXTQIl0oKqqCocPH0ZNXQPOX25Gu1I9\nTg2d9dQ72s+cDkp9xWmgRD6UlpaGvLw8JMUMwJihg2AQ0cYDNu4/azcdBHAcgHyPAYDIDdLT0wEA\n8YPCIWjXzje3tlvMDuI4AOkJAwCRG6SlpQGANig8sOW8xeumIMBxANITBgAiNwkJCQHQEQQmRl/B\ntBTL/+A37j+L/kPiLc4xDUS+xABA5CamNJBJyNWzyJuYYnFu4/6zuBbata0000DkSwwARG5iWiFs\n0tbWhmGh9d2CQER8kvYz00DkSwwARG5kWhtgcvjwYWRlJFgEgdjoKFxChC+aR2SBAYDIzcxTQW1t\nbaiqqkJWRgLCQ7v+udUbbrJ1K5FX6SYAcCUwBQrrXkB5eTmqqqowc1xX6qcdwl4AuYwrgYl0rKqq\nCuXl5dpxSEgI8vLy8PO1/0BzazsOfnEKABDb3oDFuWO7bRZH5AiuBCbSIVsDwgC0XoCptvBFwwC8\nveWQ9xtIBAYAIo8xLQ4zMY0F5E1MQVLcYO38Nzf6e7tpRAAYAIg8ynpGEABkZSTgyQdu0863Q3qs\nJkbkKQwARB5kPSPIJCsjAQZ0jXv1VE2MyFMYAIg8yFYayCS6/ZrFaz0VlifyBAYAIg+zlQYCgMFo\nRGx7AwCg9sIVNLe297h9NJG7MQAQeZithWFAx9bQg9EIAxRqvrkEAHariRF5AgMAkYfZWhi2ceNG\nZH2vY0podPs1QFnWEGAvgLyBAYDIC6x3Cm1ra0OkdKR/BqMRI9ovWGwVwUFh8gaPBwARyRWR34tI\niYh839OfR6RHpoVh5j0B81lBACy2igA4KEye5/EAoJQqVUo9BuBxALM9/XlEemWqH2wuKrRJ+9l6\n11CmgsjTHA4AIlIsIudFpNLqfLaIHBGRoyLybA9v8WsAq11tKFGgMO8FxIQ3dgsCTAWRtzjTA3gX\nQJb5CRExAHiz8/ztAPJFZHTnawUiskpEkkRkBYAtSqly6zclCjbW4wEx4Y0YPqAeGzdu7LZrKMBU\nEHmOwwFAKbUXQL3V6YkAjimlTimlWgG8DyC38/r1SqlnAMwCMA3AQyLymHuaTeS/rDeKM2lra7NZ\nQIapIPKUvo4BJAM4Y3Z8tvOcRin1hlLqe0qpJ5RSv+/j5xEFBFMQaEfXTr61Fy7bLSDDVBB5Qkjv\nl3iHeXEDo9EIo9Hos7YQeUNaWhrOt3yK5pZWDBtwCTXfXEbCkEFaHYGZ45Kwcf9Z7fqPP69BVkaC\nr5pLOlBWVubWwllOFYQRkVQAm5RSGZ3HdwIoVEpldx4/B0AppX7jVCNYEIaCVOmuCqwr3Yeo0CbE\nhDdiQvpwAF0FZLZX1loEgTWPTvBRS0mPvF0QRjp/mRwAcKuIpIpIGIAfAfjYlYawJCQFI1MlsCut\n/VHX3FUi0jwVRGTNXSUhnZkGugHApwBGichpEfmpUuoGgCcB7ADwBYD3lVJVPb2PPYWFhUz7UFC7\n0trf7sZxROaMRqNbAoDDYwBKqbl2zm8FsLXPLSEipKena2MA5hvHmWyvrGWvgNxGN3sBMQVEBBw9\n19KtF8DZQGTNXSkgpwaBPYWDwBTM5i4tRnNLK4COLaJfmH+X1gsAgAsNbTjaFI3GiI5v/uGhBqx+\n5A6ftJX0xduDwETkZnNmdM3saW5p7bZ99JABIRjVv2sNZnNrO4jcgQGAyMdMM4HMpaendwsCEY1M\n/ZB76SYAcAyAqItp51DzIHDT9TMMAgSAYwBEAWXWU+9oP3/4+iLt56qqKm08oOL0JSgYcDF2PBeE\nEQCOARAFNOuN4wTtiL34d5Rs2+fDVlGg0E0AYAqIyDbToLBBOr7oCdpReeiQj1tFvsQUEFEAsZcC\nMqmqqsJf9x5EdV2Ddu6RmUakpaV5pX2kT0wBEQWY0l0V3c6lpaXhyYUFUGb/ZMvLy7utFCZyBgMA\nkQ6Eh4VqP68r3WczCADA9ciuchvfXGlCeXm5VkmMyFlMARHpgGlbaJPwsFBsWLmg23U/X/sPGK7U\n4KbrZ2AQwZihg7pdExISgvT0dKaHgkDApIA4CEzBLHdqJublTtaOTVtDWJs5LgmNEQm4FjkUN5Tg\nmytN3a4xlZakwMVBYKIA1NtgMNDRCzBtBxHRWIsBTTVIiApFXFR/i+vy8/M911DShYDpARCRY2aO\nS9J+boxIwLfRd+Bo/0z+h09OYwAg0il7A8FZGQnIm5hisU10c2s7fr72HxYpIQ4MU28YAIh0xHw2\n0AdbD9q9LisjAasfuaNbEKi90jV2wGmi1BvdBAAOAhN13xq6NzPHJVkEgYb+SRavczA4MHEQmChA\nOTIQbO3RNV29hYEt5zG83zfaoPDYsWM5JTRAcRCYiCx6AVfD4i1SQewFkD0MAEQ6Zm8g2JqtVJBp\nQLitrY39Ttt+AAAKPElEQVSrhckmBgAinXF0INic9aBwY0QCai61WAQBbhtB1hgAiHTG2YFgc+Zr\nBK5HJlukggCuEiZLHAQm0iFXBoJNtlfWYuP+s9rxtJRWhFw9i7a2NovruGeQ/wuYQWBOAyVyj6yM\nBIvxgL3nw7vVFwbYG/Bn7poGqqsAYDQafd0MooBgngoy7RuUnp5uMwiQ/zEajYEVAIjIfbIyErqd\nS0tLQ15eHvcMIg0DABFRkGIAIAoC2ytrfd0E0iEGAKIAZT4Q/PHnNT5sCekVAwCRzs1dWuzwimBz\ntgaCicwxABDpkPlq4OaWVodXBJuzNRBMZI4BgEiH5syY0C0IELkbVwIT6Zj5iuB5uZOROzXTqfvN\nt4k2CQ81YFRTBbeLDgBcCUwUwFzZGM7i/tDu/8StK4dxNbD/YUEYoiBQuqsC60r3aceu7Av08ec1\n3QaBIxprcdeQq9oxF4f5p772ABgAiHTOPA1kLjwsFHNmTHAqLWSeEhpz4xDTQH4uYFJARGSbeRrI\nnCuzg8xTQkwDEQMAkc5Zzwgy15d6AeYF5LkpXHAK6f0SIvKl3KmZ3dI89tJCvcnKSNBqBTRGJAC4\n2vMNFNDYAyDyc66sEiYCGACI/FJfp4cSAQwARH6pL3WDiUwYAIj8kLMrgolsYQAgIgpSHp0FJCKj\nATwFIBbALqWUa1MXiKhH1rOCXFkkVlJSgpCQEKSnp3NRWJDwaA9AKXVEKfU4gDkA7vLkZxEFG3tr\nAwDHF4nZKhLPRWHBw6EAICLFInJeRCqtzmeLyBEROSoiz9q5NwfAZgBb+t5cIjLpaYEY4NjgcHp6\nus0gQMHB0RTQuwDeALDOdEJEDADeBDANQA2AAyJSqpQ6IiIFAMYBWKmU2gRgk4hsBvC+W1tPFMRs\nLRADnFsklpaWpqV7SkpK3NY28g8OBQCl1F4RSbU6PRHAMaXUKQAQkfcB5AI4opRaD2C9iNwnIs8B\nCAfwiRvbTUREfdSXQeBkAGfMjs+iIyholFK7Aezuw2cQUR/Y6g2cMNys/TztqS8wGI0AgOED6rXz\nm5YWOz2ITP5HN3sBmRc3MBqNMBqNPmsLkT8LDwvtMf9vgEI7OnYQrjfchMHtjd2uMQ0iMwDoS1lZ\nmVsLZzlcD6AzBbRJKZXReXwngEKlVHbn8XMAlFLqN043gvUAiNymdFcFPth60G4QuIQIXDQM0I5v\naf8WgGUP4OuGaADOF6Ah7+prPQBnegDS+cvkAIBbOwPDOQA/AuByWaHCwkJ+8ydyA3uDw+bMC8Os\neXQWgK5B4IOHv/ZY28g93NUTcHQa6AYAnwIYJSKnReSnSqkbAJ4EsAPAFwDeV0pVudoQUwAgIqKe\nGY1Gt9QEdnQW0Fw757cC2NrnVhARkdfpZi+gwsJCtw5uEBEFqrKyMrf0AFgUnigIWY4BdGwtbT4G\nUNccgSut/R1+P1f2HqK+Y1F4InIL05YQBoMBg8ObnLrXlQL15Hu6CQBMARH5Vnp6OgAgKW4QQgzO\nf6lkYRrvYQqIiFxmKwUEWO4HlJ/v2Kxu89XGXDfgXUwBERGRSxgAiIiClG4CAMcAiIgc464xAF1u\nBkdERPaZts0pKirq0/vopgdARETexQBARBSkdBMAOAZA5Bs/X/sPbK+s7XZ+48aNqKpybn/HuUuL\nUbqrwl1NIzu4DoCIXPbztf9Ac2u7dhweasDqR+7Axo0bLYrCh4SEIC8vr8f3mru02GIRWHhYKDas\nXOD+RlM3XAdARE6bOS4J4aFd//xNwSA9PV3bEgKARTCwZ86MCQgPC+16L64I9hsMAERBKCsjAasf\nuaPb+bS0tF6/8VvLnZrJb/x+igGAiChIMQAQEQUp3QQAzgIiInIMVwITEQUprgQmIqI+YQAgIgpS\nDABEREGKAYCIKEgxABARBSndBABOAyUicgyngRIRBSlOAyUioj5hACAiClKsB0AUxB5dc9DiODzU\ngJnjklD3xf/r9d6QkBCkp6cjLS0NADDrqXcc/tzwsFDMmTEBuVMznWswWWA9ACJymXlNAKCjLsDH\nn9dY1ASwp62tDYcPH+56L7OaAL1pbmnFB1sP9n4heRQDAFEQsy4MA3QEAevCMPaYF4yxLgzTGxaO\n8T2mgIgIgGU6aM2jE3q8tqSkRPs5Pz/fqc8xTxV9+Poip+4lS0wBERGRSxgAiIiClG4CAFcCExE5\nhiuBiYiCFFcCExFRnzAAEBEFKQYAIqIgxQBARBSkGACIiIIUAwARUZBiACAiClIMAEREQYoBgIgo\nSHk8AIhIpIgcEJEHPP1ZRETkOG/0AJ4F8IEXPoc6cU8l9+GzdC8+T31xKACISLGInBeRSqvz2SJy\nRESOisizNu6bDuBLAN8CcHnPanIO/5G5D5+le/F56oujPYB3AWSZnxARA4A3O8/fDiBfREZ3vlYg\nIq8ByAcwCcBcAI+6q9Gu6MtfPEfvdeQ6e9c4c976nC/+Uenhefb0uiPPzZlznubqZzpzX2/Xnvvn\n352698svv+z1On96ls7e6+rfTz39W3coACil9gKotzo9EcAxpdQppVQrgPcB5HZev14p9bRSaoFS\n6hkAfwTwBze222l6+A+rp2v09JfCEXp4ngwADAC2MAA4zuGSkCKSCmCTUiqj83gWgCyl1GOdxw8D\nmKiUWux0I0RYD5KIyAV9KQmpi3oAffkNEBGRa/oyC6gawDCz45TOc0RE5AecCQACy5k8BwDcKiKp\nIhIG4EcAPnZn44iIyHMcnQa6AcCnAEaJyGkR+alS6gaAJwHsAPAFgPeVUlWeayoREbmTw4PAREQU\nWHS5F1Dn9hH/V0R+JyJzfd0efyciI0RkjYj8yddtCQQikisivxeREhH5vq/b4+9EZLSIvC0ifxKR\nRb5uj79zZvsdXfYAOqeU1iulPhGR95VSP/J1mwKBiPxJKTXb1+0IFCIyGMBKpdRCX7clEIiIAFir\nlJrn67b4MxEpAnAVwJdKqS09XeuVHoALW0mkADjT+fMNb7TRn7i6NQfZ1ofn+WsAq73TSv/hyvMU\nkRwAmwH0+B9WsHH2WTq7/Y63UkBObSWBjv/8U0yXeqmN/sTZ56ld5p3m+R2nn6eIrACwRSlV7s2G\n+gmnn6dSapNS6n8BeNibDfUDzj5LI5zYfscrAcDZrSQAfATgIRFZDWCTN9roT5x9niISIyJvAxjL\nnkF3LjzPJwFMQ8ff0ce82lg/4MLzvE9EXheRdwB84t3W6psL2/D82pntd3y5EjgZXWkeADiLjt8Y\nlFLXAcz3RaP8WE/Psw7A475olB/r6Xm+AeANXzTKj/X0PHcD2O2LRvkpu8/SRCm1zpE30uUsICIi\n8jxfBgBuJeFefJ7uxefpXnye7uO2Z+nNAMCtJNyLz9O9+Dzdi8/TfTz2LL01DZRbSbgRn6d78Xm6\nF5+n+3j6WepyIRgREXkeB4GJiIIUAwARUZBiACAiClIMAEREQYoBgIgoSDEAEBEFKQYAIqIgxQBA\nRBSkGACIiILU/wcA9aLgZc0pigAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f271b087590>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "thinkplot.Cdf(cdf_fb, complement=True)\n",
    "thinkplot.Cdf(cdf_ba, complement=True)\n",
    "thinkplot.Cdf(cdf_hk, complement=True, color='gray')\n",
    "thinkplot.config(xscale='log', yscale='log', loc='upper right')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "## FOF model"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The generative model I propose is called FOF for \"friends of friends\".  It is similar to both BA and HK, but it yields a degree distribution that matches observed data better.\n",
    "\n",
    "It starts with a complete graph with `m` nodes, so initially all nodes have degree `m`.  Each time we generate a node we:\n",
    "\n",
    "1.  Select a random target uniformly from existing nodes.\n",
    "2.  Iterate through the friends of the target.  For each one, with probability `p`, we form a triangle that includes the source, friend, and a random friend of friend.\n",
    "3.  Finally, we connect the source and target.\n",
    "\n",
    "Because we choose friends of the target, this process has preferential attachment, but it does not yield a power law tail.  Rather, the degree distribution is approximately lognormal with median degree `m`.\n",
    "\n",
    "Because this process forms triangles, it tends to yield a moderately high clustering coefficient.\n",
    "\n",
    "Here's what my implementation looks like:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def fof_graph(n, m, p=0.25, seed=None):\n",
    "    \"\"\"Makes a small world graph with a lognormal degree distribution.\"\"\"\n",
    "    if m < 1 or  m+1 >= n:\n",
    "        raise nx.NetworkXError(\\\n",
    "              \"FOF network must have m>=1 and m+1<n, m=%d,n=%d\"%(m,n))\n",
    "    if seed is not None:\n",
    "        random.seed(seed)\n",
    "\n",
    "    # start with a completely connected core\n",
    "    G = nx.complete_graph(m+1)\n",
    "    G.name=\"fof_graph(%s,%s)\"%(n,m)\n",
    "\n",
    "    for source in range(len(G), n):\n",
    "        # choose a random node\n",
    "        target = random.choice(G.nodes())\n",
    "        \n",
    "        # enumerate neighbors of target and add triangles\n",
    "        friends = G.neighbors(target)\n",
    "        k = len(friends)\n",
    "        for friend in friends:\n",
    "            if flip(p):\n",
    "                triangle(G, source, friend)\n",
    "\n",
    "        # connect source and target\n",
    "        G.add_edge(source, target)\n",
    "            \n",
    "    return G\n",
    "\n",
    "\n",
    "def flip(p):\n",
    "    return random.random() < p\n",
    "\n",
    "\n",
    "def triangle(G, source, friend):\n",
    "    \"\"\"Chooses a random neighbor of `friend` and makes a triangle.\n",
    "    \n",
    "    Triangle connects `source`, `friend`, and a random neighbor of `friend`.\n",
    "    \"\"\"\n",
    "    fof = set(G[friend])\n",
    "    if source in G:\n",
    "        fof -= set(G[source])\n",
    "    if fof:\n",
    "        w = random.choice(list(fof))\n",
    "        G.add_edge(source, w)\n",
    "    G.add_edge(source, friend)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The parameter `m` is the average degree."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(4039, 44)"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "n = len(fb)\n",
    "m = int(round(np.mean(degrees(fb))))\n",
    "n, m"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The parameter `p` is the probability of adding a triangle.  Since each triangle increases the total degree by 4, keeping `p` near `1/4` tends to keep `m` constant."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(4039, 86725)"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "fof = fof_graph(n, m, p=0.24, seed=21)\n",
    "len(fof), len(fof.edges())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The clustering coefficient is similar to what we get from the HK model."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(0.602, 0.240)"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "C, average_clustering(fof)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The average path length is low."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(3.686, 3.049)"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "L, estimate_path_length(fof)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The degree distribution fits the observed data well"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "cdf_fof = Cdf(degrees(fof), label='FOF')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nrkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f271937e150>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "thinkplot.Cdf(cdf_fb)\n",
    "thinkplot.Cdf(cdf_fof, color='gray')\n",
    "thinkplot.config(xscale='log')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "On a log-log scale, the model fits the data well except in the extreme tail."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nJ4DXOjo6htQABgYGdMMNN+iBBx7Qnj17ZGYyM+3evVulpaXq7+/XJz5x5JbwW7du1cqVK7VmzRpJ\ng/+IHzp0SOedd170OSeddFL066qqKvX19am3t1c7duxQVVVV9HtmpsrKSr355pvq7+/X9OmxO+QP\nvvbNNz/aJX/t2rUaP368rrjiipR/fmoAyJtEdYNE9YL4OgFDQ/BK/G/DbW1teuyxx9TZ2al9+/bp\ntddek3NOzjmdeOKJKisr0+uvv37E+5x00km67LLLtHfvXu3du1e9vb167733dO2110afE/tb/Nat\nW1VeXq6KigpNnTp1yJ5Jzjn19PSosrJSU6dO1bZt24Z81rZt21RZWRl9fPXVV2vOnDk677zz9OGH\nH6b083tVA/BNDwCFZ6TZRPHTSiPDQ5GppAwPFa5Uh2xy4b333ov+w/z+++/rxhtvjJ6WVVJSom98\n4xtavny52tradPzxx+v555/XrFmz1NzcrNmzZ+urX/2qGhoadPDgQT3//POaMWNGdFppW1ubvv71\nr2vatGlqaWnR4sWLJQ0O6Zxxxhl6+umndeaZZ+r222/XuHHjNGvWLB0+fFhjxozRihUrtGzZMj39\n9NNav369fvazn0XbbGa6++67ddlll2nBggV65JFHVF5entP75pseAApbfK8gtkdQUlKiEjlNKD9A\nwRgZS3QM4qWXXqopU6Zo6tSp+tznPqcvfelLQ76/YsUK1dTU6Atf+IImTpyoH/7wh3LOqaqqSmvW\nrNHNN9+s448/XtXV1VqxYkW0rmVmam5u1iWXXKLKyko55/TLX/5SknTqqafq97//va666iqdcMIJ\nevzxx/Xwww/rqKOOUllZmdauXauHHnpIkyZN0vLly7Vq1aroMFTsz9Da2qoTTzxRF154YXRmUq5Q\nBEZWxBeOKRgXDlYC+w9FYBSU+OGhrq6upArGkggBYBReFYHpASAnEk0lHW4fInoD+UUPwH/YDA5F\nI9HwUM/OwYU3e/uOjg4LLW2cTQjkAQHgPwQAik5sENAb8A8CwH8IABStSI1AGr43IFEozhUCwH8I\nABS14XoD0pEzhhgayi4CwH8IAARCfG9guCCgN5A9BID/MA0UgRCZOppor6Genb3Rw2qYNoogYxoo\nAoFCce7RA/CfbPUA2AoCvha7xcSQ7SXCW0tMP3afyt17aut4ji0lAqK6ulrHHHOMxo0bp+OOO07j\n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\nAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f271cf989d0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "thinkplot.Cdf(cdf_fb, complement=True)\n",
    "thinkplot.Cdf(cdf_fof, complement=True, color='gray')\n",
    "thinkplot.config(xscale='log', yscale='log')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "In summary, the FOF model has \n",
    "\n",
    "* Short path lengths, like WS, BA, and HK.\n",
    "* Moderate clustering, similar to HK, less than WS, and higher than BA.\n",
    "* Good fit to the tail of the degree distribution, like BA and HK.\n",
    "* Good fit to the rest of the degree distribution, unlike WS, BA, and HK.\n",
    "\n",
    "Also, the mechanism of growth is plausible: when a person joins the network, they connect to a randomly-chosen friend and then a random subset of \"friends of friends\".  This process has preferential attachment because friends of friends are more likely to have high degree (see [The Inspection Paradox is Everywhere](http://allendowney.blogspot.com/2015/08/the-inspection-paradox-is-everywhere.html))  But the resulting distribution is approximately lognormal, which is heavy tailed, but does not have a power law tail."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.11"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
